use serde::{Deserialize, Serialize};
use activitystreams_vocabulary::{field_access, impl_default, impl_display};
use crate::app::oauth::{ClientSecret, EndpointAuthMethod, OAuthGrantType};
use crate::db::{Iri, Uuid};
use crate::util;
#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
pub struct OAuthClientResponse {
#[serde(serialize_with = "util::ser_uuid", deserialize_with = "util::de_uuid")]
client_id: Uuid,
client_secret: ClientSecret,
client_id_issued_at: u64,
client_secret_expires_at: u64,
#[serde(skip_serializing_if = "Vec::is_empty")]
redirect_uris: Vec<Iri>,
#[serde(skip_serializing_if = "Vec::is_empty")]
grant_types: Vec<OAuthGrantType>,
token_endpoint_auth_method: EndpointAuthMethod,
}
impl OAuthClientResponse {
#[inline]
pub const fn new() -> Self {
Self {
client_id: Uuid::nil(),
client_secret: ClientSecret::new(),
client_id_issued_at: 0,
client_secret_expires_at: 0,
redirect_uris: Vec::new(),
grant_types: Vec::new(),
token_endpoint_auth_method: EndpointAuthMethod::new(),
}
}
}
field_access! {
OAuthClientResponse {
client_id: Uuid,
client_id_issued_at: u64,
client_secret_expires_at: u64,
token_endpoint_auth_method: EndpointAuthMethod,
}
}
field_access! {
OAuthClientResponse {
client_secret: as_ref { ClientSecret },
}
}
field_access! {
OAuthClientResponse {
redirect_uris: as_ref { &[Iri], Vec<Iri> },
grant_types: as_ref { &[OAuthGrantType], Vec<OAuthGrantType> },
}
}
impl_default!(OAuthClientResponse);
impl_display!(OAuthClientResponse, json);