mod ping;
pub mod key_attributes;
mod create_key;
mod import_key;
mod export_public_key;
mod destroy_key;
mod asym_sign;
mod asym_verify;
mod list_opcodes;
mod list_providers;
use crate::requests::{request::RequestBody, response::ResponseBody, Opcode, Result};
pub use asym_sign::{OpAsymSign, ResultAsymSign};
pub use asym_verify::{OpAsymVerify, ResultAsymVerify};
pub use create_key::{OpCreateKey, ResultCreateKey};
pub use destroy_key::{OpDestroyKey, ResultDestroyKey};
pub use export_public_key::{OpExportPublicKey, ResultExportPublicKey};
pub use import_key::{OpImportKey, ResultImportKey};
pub use list_opcodes::{OpListOpcodes, ResultListOpcodes};
pub use list_providers::{OpListProviders, ProviderInfo, ResultListProviders};
pub use ping::{OpPing, ResultPing};
#[derive(Debug)]
pub enum NativeOperation {
ListProviders(OpListProviders),
ListOpcodes(OpListOpcodes),
Ping(OpPing),
CreateKey(OpCreateKey),
ImportKey(OpImportKey),
ExportPublicKey(OpExportPublicKey),
DestroyKey(OpDestroyKey),
AsymSign(OpAsymSign),
AsymVerify(OpAsymVerify),
}
impl NativeOperation {
pub fn opcode(&self) -> Opcode {
match self {
NativeOperation::Ping(_) => Opcode::Ping,
NativeOperation::CreateKey(_) => Opcode::CreateKey,
NativeOperation::DestroyKey(_) => Opcode::DestroyKey,
NativeOperation::AsymSign(_) => Opcode::AsymSign,
NativeOperation::AsymVerify(_) => Opcode::AsymVerify,
NativeOperation::ImportKey(_) => Opcode::ImportKey,
NativeOperation::ExportPublicKey(_) => Opcode::ExportPublicKey,
NativeOperation::ListOpcodes(_) => Opcode::ListOpcodes,
NativeOperation::ListProviders(_) => Opcode::ListProviders,
}
}
}
#[derive(Debug)]
pub enum NativeResult {
ListProviders(ResultListProviders),
ListOpcodes(ResultListOpcodes),
Ping(ResultPing),
CreateKey(ResultCreateKey),
ImportKey(ResultImportKey),
ExportPublicKey(ResultExportPublicKey),
DestroyKey(ResultDestroyKey),
AsymSign(ResultAsymSign),
AsymVerify(ResultAsymVerify),
}
impl NativeResult {
pub fn opcode(&self) -> Opcode {
match self {
NativeResult::Ping(_) => Opcode::Ping,
NativeResult::CreateKey(_) => Opcode::CreateKey,
NativeResult::DestroyKey(_) => Opcode::DestroyKey,
NativeResult::AsymSign(_) => Opcode::AsymSign,
NativeResult::AsymVerify(_) => Opcode::AsymVerify,
NativeResult::ImportKey(_) => Opcode::ImportKey,
NativeResult::ExportPublicKey(_) => Opcode::ExportPublicKey,
NativeResult::ListOpcodes(_) => Opcode::ListOpcodes,
NativeResult::ListProviders(_) => Opcode::ListProviders,
}
}
}
pub trait Convert {
fn body_to_operation(&self, body: RequestBody, opcode: Opcode) -> Result<NativeOperation>;
fn operation_to_body(&self, operation: NativeOperation) -> Result<RequestBody>;
fn body_to_result(&self, body: ResponseBody, opcode: Opcode) -> Result<NativeResult>;
fn result_to_body(&self, result: NativeResult) -> Result<ResponseBody>;
}