use serde::{Deserialize, Serialize};
use std::error::Error as StdError;
use std::fmt;
#[derive(Debug)]
pub struct PasskiError(pub String);
impl PasskiError {
pub(crate) fn new(msg: impl Into<String>) -> Self {
Self(msg.into())
}
}
impl fmt::Display for PasskiError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.0)
}
}
impl StdError for PasskiError {}
pub type Result<T> = std::result::Result<T, Box<dyn StdError>>;
#[derive(Serialize, Debug)]
#[serde(rename_all = "lowercase")]
pub enum AttestationConveyancePreference {
None,
Indirect,
Direct,
Enterprise,
}
#[derive(Serialize, Debug)]
#[serde(rename_all = "lowercase")]
pub enum ResidentKeyRequirement {
Discouraged,
Preferred,
Required,
}
#[derive(Serialize, Debug)]
#[serde(rename_all = "lowercase")]
pub enum UserVerificationRequirement {
Required,
Preferred,
Discouraged,
}
#[derive(Clone, Serialize, Deserialize, Debug)]
pub struct StoredPasskey {
pub credential_id: Vec<u8>,
pub public_key: Vec<u8>,
pub counter: u32,
pub algorithm: i32,
}
#[derive(Serialize, Debug)]
pub struct RelyingParty {
pub name: String,
pub id: String,
}
#[derive(Clone, Serialize, Deserialize, Debug)]
pub struct UserInfo {
pub id: String,
pub name: String,
#[serde(rename = "displayName")]
pub display_name: String,
}
#[derive(Serialize, Debug)]
pub struct PubKeyCredParam {
pub alg: i32,
#[serde(rename = "type")]
pub type_: String,
}
#[derive(Serialize, Debug)]
pub struct AuthenticatorSelection {
#[serde(rename = "residentKey")]
pub resident_key: ResidentKeyRequirement,
#[serde(rename = "userVerification")]
pub user_verification: UserVerificationRequirement,
}
#[derive(Serialize, Debug)]
pub struct ExcludeCredential {
pub id: String,
#[serde(rename = "type")]
pub type_: String,
}
#[derive(Serialize)]
pub struct AllowCredential {
pub id: String,
#[serde(rename = "type")]
pub type_: String,
}