diff options
author | Vika <vika@fireburn.ru> | 2022-07-14 17:51:49 +0300 |
---|---|---|
committer | Vika <vika@fireburn.ru> | 2022-07-15 00:31:27 +0300 |
commit | 0b47da2af8c02da35e310981919ad097e6897d16 (patch) | |
tree | 77c3be3457942ee763d5be623349ad0f8a54b8a5 /kittybox-rs | |
parent | 2c509e85429c70b528a73d7a57a3c080fb8b06bf (diff) | |
download | kittybox-0b47da2af8c02da35e310981919ad097e6897d16.tar.zst |
kittybox-indieauth: add From impls for TokenIntrospectionResponse
This makes converting Option<TokenData> into a response and vice versa a breeze, and hide the complexity of TokenIntrospectionResponse forced upon this library by the IndieAuth standard. Really, this type should've been represented as Option<TokenData>, I just don't know how to add the "active" field to it properly.
Diffstat (limited to 'kittybox-rs')
-rw-r--r-- | kittybox-rs/indieauth/src/lib.rs | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/kittybox-rs/indieauth/src/lib.rs b/kittybox-rs/indieauth/src/lib.rs index 242317d..3575132 100644 --- a/kittybox-rs/indieauth/src/lib.rs +++ b/kittybox-rs/indieauth/src/lib.rs @@ -197,6 +197,10 @@ impl TokenData { } } +// I don't like this type, because it could've been represented +// internally by Option<TokenData>. But the IndieAuth standard +// requires the "active" field to be present. I can't do anything +// about it. #[derive(Debug, Serialize, Deserialize)] pub struct TokenIntrospectionResponse { active: bool, @@ -204,6 +208,8 @@ pub struct TokenIntrospectionResponse { #[serde(skip_serializing_if = "Option::is_none")] data: Option<TokenData> } +// These wrappers and impls should take care of making use of this +// type as painless as possible. impl TokenIntrospectionResponse { pub fn inactive() -> Self { Self { active: false, data: None } @@ -228,6 +234,16 @@ impl Default for TokenIntrospectionResponse { Self::inactive() } } +impl From<Option<TokenData>> for TokenIntrospectionResponse { + fn from(data: Option<TokenData>) -> Self { + Self { active: data.is_some(), data } + } +} +impl From<TokenIntrospectionResponse> for Option<TokenData> { + fn from(response: TokenIntrospectionResponse) -> Option<TokenData> { + response.data + } +} #[derive(Debug, Serialize, Deserialize)] pub struct TokenRevocationRequest { |