pub mod attrib;
pub mod auth_rule;
pub mod author_agreement;
pub mod cred_def;
pub mod flag;
pub mod ledgers_freeze;
pub mod node;
pub mod nym;
pub mod pool;
pub mod rev_reg;
pub mod rev_reg_def;
#[cfg(any(feature = "rich_schema", test))]
#[macro_use]
pub mod rich_schema;
pub mod schema;
pub mod txn;
pub mod validator_info;
use std::collections::HashMap;
use serde;
use serde_json;
use super::constants;
use super::identifiers;
use crate::common::error::prelude::*;
use crate::pool::ProtocolVersion;
use crate::utils::did::{self, DidValue, ShortDidValue};
#[derive(Serialize, Deserialize, PartialEq, Debug)]
#[serde(rename_all = "camelCase")]
pub(crate) struct Request<T: serde::Serialize> {
pub req_id: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub identifier: Option<ShortDidValue>,
pub operation: T,
#[serde(skip_serializing_if = "Option::is_none")]
pub protocol_version: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub signature: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub signatures: Option<HashMap<String, String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub taa_acceptance: Option<author_agreement::TxnAuthrAgrmtAcceptanceData>,
#[serde(skip_serializing_if = "Option::is_none")]
pub endorser: Option<ShortDidValue>,
}
impl<T: serde::Serialize> Request<T> {
pub fn new(
req_id: i64,
operation: T,
identifier: Option<ShortDidValue>,
protocol_version: Option<i64>,
) -> Request<T> {
Request {
req_id,
identifier,
operation,
protocol_version,
signature: None,
signatures: None,
taa_acceptance: None,
endorser: None,
}
}
pub fn build_request(
req_id: i64,
operation: T,
identifier: Option<&DidValue>,
protocol_version: Option<i64>,
) -> VdrResult<serde_json::Value> {
serde_json::to_value(&Request::new(
req_id,
operation,
identifier.map(DidValue::to_short),
protocol_version,
))
.with_input_err("Cannot serialize request")
}
}
pub trait RequestType: serde::Serialize {
fn get_txn_type<'a>() -> &'a str;
fn get_sp_key(&self, _protocol_version: ProtocolVersion) -> VdrResult<Option<Vec<u8>>> {
Ok(None)
}
fn get_sp_timestamps(&self) -> VdrResult<(Option<u64>, Option<u64>)> {
Ok((None, None))
}
}
pub fn get_sp_key_marker(code: u8, protocol_version: ProtocolVersion) -> char {
if protocol_version == ProtocolVersion::Node1_3 {
code as char
} else {
(code + 48) as char }
}