From 2132a798115f3c2b43f322c21723ae58067d5164 Mon Sep 17 00:00:00 2001 From: Dr Maxim Orlovsky Date: Thu, 7 Mar 2024 23:36:53 +0100 Subject: [PATCH] cli: draft command to reconstruct consignment from YAML --- cli/src/command.rs | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/cli/src/command.rs b/cli/src/command.rs index ac6ff03..aa97551 100644 --- a/cli/src/command.rs +++ b/cli/src/command.rs @@ -24,7 +24,7 @@ use std::fs::File; use std::path::PathBuf; use std::str::FromStr; -use amplify::confinement::{SmallOrdMap, TinyOrdMap, TinyOrdSet, U16}; +use amplify::confinement::{SmallOrdMap, TinyOrdMap, TinyOrdSet, U16 as MAX16, U32 as MAX32}; use baid58::ToBaid58; use bp_util::{BpCommand, Config, Exec}; use bpstd::Sats; @@ -45,7 +45,7 @@ use rgbstd::vm::RgbIsa; use rgbstd::{AssetTag, AssignmentType, BundleId, OutputSeal, XChain, XOutputSeal}; use seals::txout::CloseMethod; use serde_crate::{Deserialize, Serialize}; -use strict_types::encoding::{FieldName, TypeName}; +use strict_types::encoding::{FieldName, StrictSerialize, TypeName}; use strict_types::StrictVal; use crate::RgbArgs; @@ -247,6 +247,18 @@ pub enum Command { dir: bool, }, + /// Reconstructs consignment from a YAML file + #[display("reconstruct")] + #[clap(hide = true)] + Reconstruct { + /// RGB file with the consignment YAML data + src: PathBuf, + + /// Path for the resulting consignment file. If not given, prints the + /// consignment to STDOUT. + dst: Option, + }, + /// Debug-dump all stash and inventory data #[display("dump")] Dump { @@ -559,7 +571,7 @@ impl Exec for RgbArgs { .expect("global type doesn't match type definition"); let serialized = types - .strict_serialize_type::(&typed_val) + .strict_serialize_type::(&typed_val) .expect("internal error"); // Workaround for borrow checker: let field_name = @@ -854,6 +866,17 @@ impl Exec for RgbArgs { } None } + Command::Reconstruct { src, dst } => { + let file = File::open(src)?; + let transfer: Bindle = serde_yaml::from_reader(&file)?; + match dst { + None => println!("{transfer}"), + Some(dst) => { + transfer.strict_serialize_to_file::(dst)?; + } + } + None + } Command::Dump { root_dir } => { let runtime = self.rgb_runtime(&config)?;