diff --git a/enclaves/quartz/src/main.rs b/enclaves/quartz/src/main.rs index 64b04b8..56df9a8 100644 --- a/enclaves/quartz/src/main.rs +++ b/enclaves/quartz/src/main.rs @@ -16,6 +16,7 @@ mod cli; mod server; +mod types; use std::time::Duration; diff --git a/enclaves/quartz/src/types.rs b/enclaves/quartz/src/types.rs new file mode 100644 index 0000000..e341e59 --- /dev/null +++ b/enclaves/quartz/src/types.rs @@ -0,0 +1,58 @@ +use cosmwasm_std::{HexBinary, StdError}; +use quartz_cw::state::{Config, RawConfig}; +use quartz_proto::quartz::InstantiateResponse as RawInstantiateResponse; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq)] +pub struct InstantiateResponse { + message: InstantiateResponseMsg, +} + +impl InstantiateResponse { + pub fn new(config: Config, quote: Vec) -> Self { + Self { + message: InstantiateResponseMsg { config, quote }, + } + } +} + +#[derive(Clone, Debug, PartialEq)] +pub struct InstantiateResponseMsg { + config: Config, + quote: Vec, +} + +#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] +pub struct RawInstantiateResponseMsg { + config: RawConfig, + quote: HexBinary, +} + +impl TryFrom for InstantiateResponseMsg { + type Error = StdError; + + fn try_from(value: RawInstantiateResponseMsg) -> Result { + Ok(Self { + config: value.config.try_into()?, + quote: value.quote.into(), + }) + } +} + +impl From for RawInstantiateResponseMsg { + fn from(value: InstantiateResponseMsg) -> Self { + Self { + config: value.config.into(), + quote: value.quote.into(), + } + } +} + +impl From for RawInstantiateResponse { + fn from(value: InstantiateResponse) -> Self { + let raw_message: RawInstantiateResponseMsg = value.message.into(); + Self { + message: serde_json::to_string(&raw_message).expect("infallible serializer"), + } + } +}