use alloc::vec::Vec;
use alloc::{boxed::Box, string::String};
use jose_b64::base64ct::Base64;
use jose_b64::serde::Bytes;
use jose_jwa::Signing;
use jose_jwk::{Jwk, Thumbprint};
use serde::{Deserialize, Serialize};
#[inline]
fn b64_default() -> bool {
true
}
#[inline]
fn b64_serialize(value: &bool) -> bool {
!value
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Protected {
#[serde(skip_serializing_if = "Option::is_none", default)]
pub crit: Option<Vec<String>>,
#[cfg(feature = "url")]
#[serde(skip_serializing_if = "Option::is_none", default)]
pub url: Option<url::Url>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub nonce: Option<Bytes>,
#[serde(skip_serializing_if = "b64_serialize", default = "b64_default")]
pub b64: bool,
#[serde(flatten)]
pub oth: Unprotected,
}
impl Default for Protected {
fn default() -> Self {
Self {
crit: None,
nonce: None,
b64: true,
oth: Unprotected::default(),
#[cfg(feature = "url")]
url: None,
}
}
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct Unprotected {
#[serde(skip_serializing_if = "Option::is_none", default)]
pub alg: Option<Signing>,
#[cfg(feature = "url")]
#[serde(skip_serializing_if = "Option::is_none", default)]
pub jku: Option<url::Url>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub jwk: Option<Jwk>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub kid: Option<String>,
#[serde(skip_serializing_if = "Option::is_none", default)]
#[cfg(feature = "url")]
pub x5u: Option<url::Url>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub x5c: Option<Vec<Bytes<Box<[u8]>, Base64>>>,
#[serde(flatten)]
pub x5t: Thumbprint,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub typ: Option<String>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub cty: Option<String>,
}