use crate::data::{DamlJsonCreatedEvent, DamlJsonExerciseResult, DamlJsonParty};
use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
use std::iter::once;
#[derive(Debug, Serialize, Deserialize)]
pub struct DamlJsonRequestMeta {
#[serde(rename = "commandId")]
pub command_id: String,
}
impl DamlJsonRequestMeta {
pub fn new(command_id: impl Into<String>) -> Self {
Self {
command_id: command_id.into(),
}
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DamlJsonCreateRequest {
#[serde(rename = "templateId")]
pub template_id: String,
pub payload: Value,
pub meta: Option<DamlJsonRequestMeta>,
}
impl DamlJsonCreateRequest {
pub fn new(template_id: impl Into<String>, payload: Value) -> Self {
Self {
template_id: template_id.into(),
payload,
meta: None,
}
}
pub fn new_with_meta(template_id: impl Into<String>, payload: Value, meta: DamlJsonRequestMeta) -> Self {
Self {
template_id: template_id.into(),
payload,
meta: Some(meta),
}
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DamlJsonCreateResponse {
pub status: u16,
pub result: DamlJsonCreatedEvent,
#[serde(skip_serializing_if = "Option::is_none")]
pub warnings: Option<HashMap<String, Vec<String>>>,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(untagged)]
pub enum DamlJsonExerciseRequestType {
Invalid(DamlJsonInvalidExerciseRequest),
Exercise(DamlJsonExerciseRequest),
ExerciseByKey(DamlJsonExerciseByKeyRequest),
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DamlJsonExerciseRequest {
#[serde(rename = "templateId")]
pub template_id: String,
#[serde(rename = "contractId")]
pub contract_id: String,
pub choice: String,
pub argument: Value,
}
impl DamlJsonExerciseRequest {
pub fn new(
template_id: impl Into<String>,
contract_id: impl Into<String>,
choice: impl Into<String>,
argument: Value,
) -> Self {
Self {
template_id: template_id.into(),
contract_id: contract_id.into(),
choice: choice.into(),
argument,
}
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DamlJsonExerciseResponse {
pub status: u16,
pub result: DamlJsonExerciseResult,
#[serde(skip_serializing_if = "Option::is_none")]
pub warnings: Option<HashMap<String, Vec<String>>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DamlJsonExerciseByKeyRequest {
#[serde(rename = "templateId")]
pub template_id: String,
pub key: Value,
pub choice: String,
pub argument: Value,
}
impl DamlJsonExerciseByKeyRequest {
pub fn new(template_id: impl Into<String>, key: Value, choice: impl Into<String>, argument: Value) -> Self {
Self {
template_id: template_id.into(),
key,
choice: choice.into(),
argument,
}
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DamlJsonExerciseByKeyResponse {
pub status: u16,
pub result: DamlJsonExerciseResult,
#[serde(skip_serializing_if = "Option::is_none")]
pub warnings: Option<HashMap<String, Vec<String>>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DamlJsonInvalidExerciseRequest {
#[serde(rename = "templateId")]
pub template_id: String,
#[serde(rename = "contractId")]
pub contract_id: String,
pub key: Value,
pub choice: String,
pub argument: Value,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DamlJsonCreateAndExerciseRequest {
#[serde(rename = "templateId")]
pub template_id: String,
pub payload: Value,
pub choice: String,
pub argument: Value,
}
impl DamlJsonCreateAndExerciseRequest {
pub fn new(template_id: impl Into<String>, payload: Value, choice: impl Into<String>, argument: Value) -> Self {
Self {
template_id: template_id.into(),
payload,
choice: choice.into(),
argument,
}
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DamlJsonCreateAndExerciseResponse {
pub status: u16,
pub result: DamlJsonExerciseResult,
#[serde(skip_serializing_if = "Option::is_none")]
pub warnings: Option<HashMap<String, Vec<String>>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DamlJsonFetchRequest {
#[serde(rename = "contractId")]
pub contract_id: String,
}
impl DamlJsonFetchRequest {
pub fn new(contract_id: impl Into<String>) -> Self {
Self {
contract_id: contract_id.into(),
}
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DamlJsonFetchResponse {
pub status: u16,
pub result: DamlJsonCreatedEvent,
#[serde(skip_serializing_if = "Option::is_none")]
pub warnings: Option<HashMap<String, Vec<String>>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DamlJsonFetchByKeyRequest {
#[serde(rename = "templateId")]
pub template_id: String,
pub key: Value,
}
impl DamlJsonFetchByKeyRequest {
pub fn new(template_id: impl Into<String>, key: Value) -> Self {
Self {
template_id: template_id.into(),
key,
}
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DamlJsonFetchByKeyResponse {
pub status: u16,
pub result: DamlJsonCreatedEvent,
#[serde(skip_serializing_if = "Option::is_none")]
pub warnings: Option<HashMap<String, Vec<String>>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DamlJsonQueryResponse {
pub status: u16,
pub result: Vec<DamlJsonCreatedEvent>,
#[serde(skip_serializing_if = "Option::is_none")]
pub warnings: Option<HashMap<String, Vec<String>>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DamlJsonFetchPartiesRequest(pub Vec<String>);
impl DamlJsonFetchPartiesRequest {
pub fn new(identifiers: Vec<String>) -> Self {
Self(identifiers)
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DamlJsonFetchPartiesResponse {
pub status: u16,
pub result: Vec<DamlJsonParty>,
#[serde(skip_serializing_if = "Option::is_none")]
pub warnings: Option<HashMap<String, Vec<String>>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DamlJsonAllocatePartyRequest {
#[serde(rename = "identifierHint")]
pub identifier_hint: Option<String>,
#[serde(rename = "displayName")]
pub display_name: Option<String>,
}
impl DamlJsonAllocatePartyRequest {
pub fn new<S: Into<String>>(identifier_hint: Option<S>, display_name: Option<S>) -> Self {
Self {
identifier_hint: identifier_hint.map(Into::into),
display_name: display_name.map(Into::into),
}
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DamlJsonAllocatePartyResponse {
pub status: u16,
pub result: DamlJsonParty,
#[serde(skip_serializing_if = "Option::is_none")]
pub warnings: Option<HashMap<String, Vec<String>>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DamlJsonListPackagesResponse {
pub status: u16,
pub result: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub warnings: Option<HashMap<String, Vec<String>>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DamlJsonUploadDarResponse {
pub status: u16,
pub result: u8,
#[serde(skip_serializing_if = "Option::is_none")]
pub warnings: Option<HashMap<String, Vec<String>>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DamlJsonErrorResponse {
pub status: u16,
pub errors: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub warnings: Option<HashMap<String, Vec<String>>>,
}
impl DamlJsonErrorResponse {
pub fn single(status: u16, error: String) -> Self {
Self {
status,
errors: vec![error],
warnings: None,
}
}
}
pub fn make_single_warning(name: impl Into<String>, data: Vec<String>) -> HashMap<String, Vec<String>> {
once((name.into(), data)).collect::<HashMap<_, _>>()
}