use crate::codec::support::{from_wire_timestamp, to_wire_timestamp};
use crate::external_credential::{
DeleteExternalCredentialRequest, ExchangeExternalCredentialRequest,
ExchangeExternalCredentialResponse, ExternalCredential, ExternalCredentialAuthConfig,
ExternalCredentialLookup, ExternalCredentialTokenExchangeDriver,
ExternalCredentialTokenResponse, GetExternalCredentialRequest, ListExternalCredentialsRequest,
ListExternalCredentialsResponse, ResolveExternalCredentialRequest,
ResolveExternalCredentialResponse, UpsertExternalCredentialRequest,
ValidateExternalCredentialConfigRequest,
};
use crate::generated::v1;
pub(crate) fn to_wire_delete_external_credential_request(
value: DeleteExternalCredentialRequest,
) -> v1::DeleteExternalCredentialRequest {
v1::DeleteExternalCredentialRequest { id: value.id }
}
pub(crate) fn to_wire_exchange_external_credential_request(
value: ExchangeExternalCredentialRequest,
) -> v1::ExchangeExternalCredentialRequest {
v1::ExchangeExternalCredentialRequest {
provider: value.provider,
connection: value.connection,
connection_id: value.connection_id,
credential_subject_id: value.credential_subject_id,
actor_subject_id: value.actor_subject_id,
instance: value.instance,
auth: value.auth.map(to_wire_external_credential_auth_config),
credential_json: value.credential_json,
connection_params: value.connection_params,
}
}
pub(crate) fn from_wire_exchange_external_credential_response(
value: v1::ExchangeExternalCredentialResponse,
) -> ExchangeExternalCredentialResponse {
ExchangeExternalCredentialResponse {
token_response: value
.token_response
.map(from_wire_external_credential_token_response),
}
}
pub(crate) fn to_wire_external_credential(value: ExternalCredential) -> v1::ExternalCredential {
v1::ExternalCredential {
id: value.id,
subject_id: value.subject_id,
instance: value.instance,
access_token: value.access_token,
refresh_token: value.refresh_token,
scopes: value.scopes,
expires_at: value.expires_at.map(to_wire_timestamp),
last_refreshed_at: value.last_refreshed_at.map(to_wire_timestamp),
refresh_error_count: value.refresh_error_count,
metadata_json: value.metadata_json,
created_at: value.created_at.map(to_wire_timestamp),
updated_at: value.updated_at.map(to_wire_timestamp),
connection_id: value.connection_id,
}
}
pub(crate) fn from_wire_external_credential(value: v1::ExternalCredential) -> ExternalCredential {
ExternalCredential {
id: value.id,
subject_id: value.subject_id,
instance: value.instance,
access_token: value.access_token,
refresh_token: value.refresh_token,
scopes: value.scopes,
expires_at: value.expires_at.map(from_wire_timestamp),
last_refreshed_at: value.last_refreshed_at.map(from_wire_timestamp),
refresh_error_count: value.refresh_error_count,
metadata_json: value.metadata_json,
created_at: value.created_at.map(from_wire_timestamp),
updated_at: value.updated_at.map(from_wire_timestamp),
connection_id: value.connection_id,
}
}
pub(crate) fn to_wire_external_credential_auth_config(
value: ExternalCredentialAuthConfig,
) -> v1::ExternalCredentialAuthConfig {
v1::ExternalCredentialAuthConfig {
r#type: value.r#type,
token: value.token,
token_prefix: value.token_prefix,
grant_type: value.grant_type,
token_url: value.token_url,
client_id: value.client_id,
client_secret: value.client_secret,
client_auth: value.client_auth,
token_exchange: value.token_exchange,
scopes: value.scopes,
scope_param: value.scope_param,
scope_separator: value.scope_separator,
token_params: value.token_params,
refresh_params: value.refresh_params,
accept_header: value.accept_header,
access_token_path: value.access_token_path,
token_exchange_drivers: value
.token_exchange_drivers
.into_iter()
.map(to_wire_external_credential_token_exchange_driver)
.collect(),
refresh_token: value.refresh_token,
}
}
pub(crate) fn to_wire_external_credential_lookup(
value: ExternalCredentialLookup,
) -> v1::ExternalCredentialLookup {
v1::ExternalCredentialLookup {
subject_id: value.subject_id,
instance: value.instance,
connection_id: value.connection_id,
}
}
pub(crate) fn to_wire_external_credential_token_exchange_driver(
value: ExternalCredentialTokenExchangeDriver,
) -> v1::ExternalCredentialTokenExchangeDriver {
v1::ExternalCredentialTokenExchangeDriver {
r#type: value.r#type,
target_principal: value.target_principal,
scopes: value.scopes,
lifetime_seconds: value.lifetime_seconds,
endpoint: value.endpoint,
params: value.params,
}
}
pub(crate) fn from_wire_external_credential_token_response(
value: v1::ExternalCredentialTokenResponse,
) -> ExternalCredentialTokenResponse {
ExternalCredentialTokenResponse {
access_token: value.access_token,
refresh_token: value.refresh_token,
expires_in: value.expires_in,
token_type: value.token_type,
extra_json: value.extra_json,
refresh_source: value.refresh_source,
}
}
pub(crate) fn to_wire_get_external_credential_request(
value: GetExternalCredentialRequest,
) -> v1::GetExternalCredentialRequest {
v1::GetExternalCredentialRequest {
lookup: value.lookup.map(to_wire_external_credential_lookup),
}
}
pub(crate) fn to_wire_list_external_credentials_request(
value: ListExternalCredentialsRequest,
) -> v1::ListExternalCredentialsRequest {
v1::ListExternalCredentialsRequest {
subject_id: value.subject_id,
instance: value.instance,
connection_id: value.connection_id,
}
}
pub(crate) fn from_wire_list_external_credentials_response(
value: v1::ListExternalCredentialsResponse,
) -> ListExternalCredentialsResponse {
ListExternalCredentialsResponse {
credentials: value
.credentials
.into_iter()
.map(from_wire_external_credential)
.collect(),
}
}
pub(crate) fn to_wire_resolve_external_credential_request(
value: ResolveExternalCredentialRequest,
) -> v1::ResolveExternalCredentialRequest {
v1::ResolveExternalCredentialRequest {
provider: value.provider,
connection: value.connection,
connection_id: value.connection_id,
mode: value.mode,
credential_subject_id: value.credential_subject_id,
actor_subject_id: value.actor_subject_id,
instance: value.instance,
auth: value.auth.map(to_wire_external_credential_auth_config),
connection_params: value.connection_params,
}
}
pub(crate) fn from_wire_resolve_external_credential_response(
value: v1::ResolveExternalCredentialResponse,
) -> ResolveExternalCredentialResponse {
ResolveExternalCredentialResponse {
token: value.token,
expires_at: value.expires_at.map(from_wire_timestamp),
metadata_json: value.metadata_json,
params: value.params,
credential: value.credential.map(from_wire_external_credential),
}
}
pub(crate) fn to_wire_upsert_external_credential_request(
value: UpsertExternalCredentialRequest,
) -> v1::UpsertExternalCredentialRequest {
v1::UpsertExternalCredentialRequest {
credential: value.credential.map(to_wire_external_credential),
preserve_timestamps: value.preserve_timestamps,
}
}
pub(crate) fn to_wire_validate_external_credential_config_request(
value: ValidateExternalCredentialConfigRequest,
) -> v1::ValidateExternalCredentialConfigRequest {
v1::ValidateExternalCredentialConfigRequest {
provider: value.provider,
connection: value.connection,
connection_id: value.connection_id,
mode: value.mode,
auth: value.auth.map(to_wire_external_credential_auth_config),
connection_params: value.connection_params,
}
}