use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use crate::error::Error;
#[derive(Debug, Clone, Deserialize)]
pub struct UserActionChallenge {
#[serde(rename = "challenge")]
pub challenge: String,
#[serde(rename = "challengeIdentifier")]
pub challenge_identifier: String,
}
#[derive(Debug, Clone, Serialize)]
pub struct CredentialAssertionData {
#[serde(rename = "credId")]
pub cred_id: String,
#[serde(rename = "clientData")]
pub client_data: String,
#[serde(rename = "signature")]
pub signature: String,
}
#[derive(Debug, Clone, Serialize)]
pub struct CredentialAssertion {
#[serde(rename = "kind")]
pub kind: String,
#[serde(rename = "credentialAssertion")]
pub credential_assertion: CredentialAssertionData,
}
#[async_trait]
pub trait UserActionSigner: Send + Sync {
async fn sign(&self, challenge: &UserActionChallenge) -> Result<CredentialAssertion, Error>;
}