use candid::{CandidType, Decode, Encode};
use ic_stable_structures::{storable::Bound, Storable};
use serde::{Deserialize, Serialize};
use std::borrow::Cow;
use std::fmt;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash, CandidType)]
pub enum Curve {
#[serde(rename = "secp256k1")]
Secp256k1,
#[serde(rename = "ed25519")]
Ed25519,
}
impl Storable for Curve {
fn to_bytes(&self) -> Cow<[u8]> {
Cow::Owned(Encode!(self).unwrap())
}
fn from_bytes(bytes: Cow<[u8]>) -> Self {
Decode!(bytes.as_ref(), Curve).unwrap()
}
const BOUND: Bound = Bound::Unbounded;
}
impl fmt::Display for Curve {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Curve::Secp256k1 => write!(f, "secp256k1"),
Curve::Ed25519 => write!(f, "ed25519"),
}
}
}