feat(router): implement API endpoints for managing API keys (#511)
Files to modify:


**api_keys.rs**
  Add:
    - function: private::from
    - function: private::from
    - function: pub::serialize
    - function: pub::deserialize
    - function: private::expecting
    - function: private::visit_str
    - function: private::schema
    - function: private::test_serialization
    - function: private::test_deserialization
    - function: private::test_null
    - struct: pub::CreateApiKeyRequest
    - struct: pub::CreateApiKeyResponse
    - struct: pub::RetrieveApiKeyResponse
    - struct: pub::UpdateApiKeyRequest
    - struct: pub::RevokeApiKeyResponse
    - struct: pub::ListApiKeyConstraints
    - struct: private::NeverVisitor
    - enum: pub::ApiKeyExpiration
    - impl: impl From<ApiKeyExpiration> for Option<PrimitiveDateTime>
    - impl: impl From<Option<PrimitiveDateTime>> for ApiKeyExpiration
    - impl: impl serde::de::Visitor<'de> for NeverVisitor
    - impl: impl ToSchema<'a> for ApiKeyExpiration
    - mod: private::never
    - mod: private::api_key_expiration_tests

**lib.rs**
  Add:
    - mod: pub::api_keys

**crypto.rs**
  Add:
    - function: pub::generate_cryptographically_secure_random_string
    - function: pub::generate_cryptographically_secure_random_bytes

**errors.rs**
  Modify existing code

**consts.rs**
  Modify existing code

**core.rs**
  Add:
    - mod: pub::api_keys

**admin.rs**
  Modify existing code

**api_keys.rs**
  Add:
    - function: private::from
    - function: private::from
    - function: pub::serialize
    - function: pub::deserialize
    - function: private::expecting
    - function: private::visit_str
    - function: private::schema
    - function: private::test_serialization
    - function: private::test_deserialization
    - function: private::test_null
    - struct: pub::CreateApiKeyRequest
    - struct: pub::CreateApiKeyResponse
    - struct: pub::RetrieveApiKeyResponse
    - struct: pub::UpdateApiKeyRequest
    - struct: pub::RevokeApiKeyResponse
    - struct: pub::ListApiKeyConstraints
    - struct: private::NeverVisitor
    - enum: pub::ApiKeyExpiration
    - impl: impl From<ApiKeyExpiration> for Option<PrimitiveDateTime>
    - impl: impl From<Option<PrimitiveDateTime>> for ApiKeyExpiration
    - impl: impl serde::de::Visitor<'de> for NeverVisitor
    - impl: impl ToSchema<'a> for ApiKeyExpiration
    - mod: private::never
    - mod: private::api_key_expiration_tests

**errors.rs**
  Modify existing code

**api_error_response.rs**
  Modify existing code

**db.rs**
  Add:
    - mod: pub::api_keys

**api_keys.rs**
  Add:
    - function: private::from
    - function: private::from
    - function: pub::serialize
    - function: pub::deserialize
    - function: private::expecting
    - function: private::visit_str
    - function: private::schema
    - function: private::test_serialization
    - function: private::test_deserialization
    - function: private::test_null
    - struct: pub::CreateApiKeyRequest
    - struct: pub::CreateApiKeyResponse
    - struct: pub::RetrieveApiKeyResponse
    - struct: pub::UpdateApiKeyRequest
    - struct: pub::RevokeApiKeyResponse
    - struct: pub::ListApiKeyConstraints
    - struct: private::NeverVisitor
    - enum: pub::ApiKeyExpiration
    - impl: impl From<ApiKeyExpiration> for Option<PrimitiveDateTime>
    - impl: impl From<Option<PrimitiveDateTime>> for ApiKeyExpiration
    - impl: impl serde::de::Visitor<'de> for NeverVisitor
    - impl: impl ToSchema<'a> for ApiKeyExpiration
    - mod: private::never
    - mod: private::api_key_expiration_tests

**lib.rs**
  Add:
    - mod: pub::api_keys

**openapi.rs**
  Modify existing code

**routes.rs**
  Add:
    - mod: pub::api_keys

**api_keys.rs**
  Add:
    - function: private::from
    - function: private::from
    - function: pub::serialize
    - function: pub::deserialize
    - function: private::expecting
    - function: private::visit_str
    - function: private::schema
    - function: private::test_serialization
    - function: private::test_deserialization
    - function: private::test_null
    - struct: pub::CreateApiKeyRequest
    - struct: pub::CreateApiKeyResponse
    - struct: pub::RetrieveApiKeyResponse
    - struct: pub::UpdateApiKeyRequest
    - struct: pub::RevokeApiKeyResponse
    - struct: pub::ListApiKeyConstraints
    - struct: private::NeverVisitor
    - enum: pub::ApiKeyExpiration
    - impl: impl From<ApiKeyExpiration> for Option<PrimitiveDateTime>
    - impl: impl From<Option<PrimitiveDateTime>> for ApiKeyExpiration
    - impl: impl serde::de::Visitor<'de> for NeverVisitor
    - impl: impl ToSchema<'a> for ApiKeyExpiration
    - mod: private::never
    - mod: private::api_key_expiration_tests

**app.rs**
  Add:
    - function: pub::server
    - struct: pub::ApiKeys
    - impl: impl ApiKeys

**api.rs**
  Add:
    - mod: pub::api_keys

**api_keys.rs**
  Add:
    - function: private::from
    - function: private::from
    - function: pub::serialize
    - function: pub::deserialize
    - function: private::expecting
    - function: private::visit_str
    - function: private::schema
    - function: private::test_serialization
    - function: private::test_deserialization
    - function: private::test_null
    - struct: pub::CreateApiKeyRequest
    - struct: pub::CreateApiKeyResponse
    - struct: pub::RetrieveApiKeyResponse
    - struct: pub::UpdateApiKeyRequest
    - struct: pub::RevokeApiKeyResponse
    - struct: pub::ListApiKeyConstraints
    - struct: private::NeverVisitor
    - enum: pub::ApiKeyExpiration
    - impl: impl From<ApiKeyExpiration> for Option<PrimitiveDateTime>
    - impl: impl From<Option<PrimitiveDateTime>> for ApiKeyExpiration
    - impl: impl serde::de::Visitor<'de> for NeverVisitor
    - impl: impl ToSchema<'a> for ApiKeyExpiration
    - mod: private::never
    - mod: private::api_key_expiration_tests

**storage.rs**
  Add:
    - mod: pub::api_keys

**api_keys.rs**
  Add:
    - function: private::from
    - function: private::from
    - function: pub::serialize
    - function: pub::deserialize
    - function: private::expecting
    - function: private::visit_str
    - function: private::schema
    - function: private::test_serialization
    - function: private::test_deserialization
    - function: private::test_null
    - struct: pub::CreateApiKeyRequest
    - struct: pub::CreateApiKeyResponse
    - struct: pub::RetrieveApiKeyResponse
    - struct: pub::UpdateApiKeyRequest
    - struct: pub::RevokeApiKeyResponse
    - struct: pub::ListApiKeyConstraints
    - struct: private::NeverVisitor
    - enum: pub::ApiKeyExpiration
    - impl: impl From<ApiKeyExpiration> for Option<PrimitiveDateTime>
    - impl: impl From<Option<PrimitiveDateTime>> for ApiKeyExpiration
    - impl: impl serde::de::Visitor<'de> for NeverVisitor
    - impl: impl ToSchema<'a> for ApiKeyExpiration
    - mod: private::never
    - mod: private::api_key_expiration_tests

**transformers.rs**
  Add:
    - function: private::from
    - function: private::from
    - function: private::from
    - impl: impl From<
F<(
storage_models::api_keys::ApiKey,
crate::core::api_keys::PlaintextApiKey,
)>,
> for F<api_models::api_keys::CreateApiKeyResponse>
    - impl: impl From<F<storage_models::api_keys::ApiKey>> for F<api_models::api_keys::RetrieveApiKeyResponse>
    - impl: impl From<F<api_models::api_keys::UpdateApiKeyRequest>> for F<storage_models::api_keys::ApiKeyUpdate>

**env.rs**
  Add:
    - function: pub::prefix_for_env

**types.rs**
  Modify existing code

**api_keys.rs**
  Add:
    - function: private::from
    - function: private::from
    - function: pub::serialize
    - function: pub::deserialize
    - function: private::expecting
    - function: private::visit_str
    - function: private::schema
    - function: private::test_serialization
    - function: private::test_deserialization
    - function: private::test_null
    - struct: pub::CreateApiKeyRequest
    - struct: pub::CreateApiKeyResponse
    - struct: pub::RetrieveApiKeyResponse
    - struct: pub::UpdateApiKeyRequest
    - struct: pub::RevokeApiKeyResponse
    - struct: pub::ListApiKeyConstraints
    - struct: private::NeverVisitor
    - enum: pub::ApiKeyExpiration
    - impl: impl From<ApiKeyExpiration> for Option<PrimitiveDateTime>
    - impl: impl From<Option<PrimitiveDateTime>> for ApiKeyExpiration
    - impl: impl serde::de::Visitor<'de> for NeverVisitor
    - impl: impl ToSchema<'a> for ApiKeyExpiration
    - mod: private::never
    - mod: private::api_key_expiration_tests

**lib.rs**
  Add:
    - mod: pub::api_keys

**query.rs**
  Add:
    - mod: pub::api_keys

**api_keys.rs**
  Add:
    - function: private::from
    - function: private::from
    - function: pub::serialize
    - function: pub::deserialize
    - function: private::expecting
    - function: private::visit_str
    - function: private::schema
    - function: private::test_serialization
    - function: private::test_deserialization
    - function: private::test_null
    - struct: pub::CreateApiKeyRequest
    - struct: pub::CreateApiKeyResponse
    - struct: pub::RetrieveApiKeyResponse
    - struct: pub::UpdateApiKeyRequest
    - struct: pub::RevokeApiKeyResponse
    - struct: pub::ListApiKeyConstraints
    - struct: private::NeverVisitor
    - enum: pub::ApiKeyExpiration
    - impl: impl From<ApiKeyExpiration> for Option<PrimitiveDateTime>
    - impl: impl From<Option<PrimitiveDateTime>> for ApiKeyExpiration
    - impl: impl serde::de::Visitor<'de> for NeverVisitor
    - impl: impl ToSchema<'a> for ApiKeyExpiration
    - mod: private::never
    - mod: private::api_key_expiration_tests

**schema.rs**
  Modify existing code