Change `ProofSourceHandleCallback::ConfigureSSLFunc` and `ProofSourceHandleCallback::ALPNSelectFunc` from `std::function` to `quiche::SingleUseCallback`. `quiche::SingleUseCallback` is an alias for single-use `absl::AnyInvocable`.

This remove the need to use CallAtMostOnce to wrap "configure_ssl" and "select_alpn" functors.

PiperOrigin-RevId: 684881445
diff --git a/quiche/quic/core/crypto/proof_source.h b/quiche/quic/core/crypto/proof_source.h
index 11c7c76..725b5ac 100644
--- a/quiche/quic/core/crypto/proof_source.h
+++ b/quiche/quic/core/crypto/proof_source.h
@@ -27,6 +27,7 @@
 #include "quiche/quic/platform/api/quic_socket_address.h"
 #include "quiche/common/platform/api/quiche_export.h"
 #include "quiche/common/platform/api/quiche_reference_counted.h"
+#include "quiche/common/quiche_callbacks.h"
 
 namespace quic {
 
@@ -262,16 +263,14 @@
     QuicDelayedSSLConfig delayed_ssl_config;
   };
 
-  // Functor to call to configure the SSL object.  This functor must not be
-  // called more than once.
-  using ConfigureSSLFunc =
-      std::function<absl::Status(SSL& ssl, const SSL_PRIVATE_KEY_METHOD& key)>;
+  // Functor to call to configure the SSL object.
+  using ConfigureSSLFunc = quiche::SingleUseCallback<absl::Status(
+      SSL& ssl, const SSL_PRIVATE_KEY_METHOD& key)>;
 
-  // Functor to call to select ALPN and configure ALPS.  This functor must not
-  // be called more than once.
-  using ALPNSelectFunc =
-      std::function<int(SSL& ssl, const uint8_t** out, uint8_t* out_len,
-                        const uint8_t* in, unsigned in_len)>;
+  // Functor to call to select ALPN and configure ALPS.
+  using ALPNSelectFunc = quiche::SingleUseCallback<int(
+      SSL& ssl, const uint8_t** out, uint8_t* out_len, const uint8_t* in,
+      unsigned in_len)>;
 
   // Configuration to use for configuring the SSL object when using a
   // handshake-hints server.