pub enum PlutusDatumSchema {
BasicConversions,
DetailedSchema,
}
Expand description
JSON <-> PlutusData conversion schemas. Follows ScriptDataJsonSchema in cardano-cli defined at: https://github.com/input-output-hk/cardano-node/blob/master/cardano-api/src/Cardano/Api/ScriptData.hs#L254
All methods here have the following restrictions due to limitations on dependencies:
- JSON numbers above u64::MAX (positive) or below i64::MIN (negative) will throw errors
- Hex strings for bytes don’t accept odd-length (half-byte) strings. cardano-cli seems to support these however but it seems to be different than just 0-padding on either side when tested so proceed with caution
Variants
BasicConversions
ScriptDataJsonNoSchema in cardano-node.
This is the format used by –script-data-value in cardano-cli This tries to accept most JSON but does not support the full spectrum of Plutus datums. From JSON:
- null/true/false/floats NOT supported
- strings starting with 0x are treated as hex bytes. All other strings are encoded as their utf8 bytes. To JSON:
- ConstrPlutusData not supported in ANY FORM (neither keys nor values)
- Lists not supported in keys
- Maps not supported in keys
DetailedSchema
ScriptDataJsonDetailedSchema in cardano-node.
This is the format used by –script-data-file in cardano-cli This covers almost all (only minor exceptions) Plutus datums, but the JSON must conform to a strict schema. The schema specifies that ALL keys and ALL values must be contained in a JSON map with 2 cases:
- For ConstrPlutusData there must be two fields “constructor” contianing a number and “fields” containing its fields e.g. { “constructor”: 2, “fields”: [{“int”: 2}, {“list”: [{“bytes”: “CAFEF00D”}]}]}
- For all other cases there must be only one field named “int”, “bytes”, “list” or “map” Integer’s value is a JSON number e.g. {“int”: 100} Bytes’ value is a hex string representing the bytes WITHOUT any prefix e.g. {“bytes”: “CAFEF00D”} Lists’ value is a JSON list of its elements encoded via the same schema e.g. {“list”: [{“bytes”: “CAFEF00D”}]} Maps’ value is a JSON list of objects, one for each key-value pair in the map, with keys “k” and “v” respectively with their values being the plutus datum encoded via this same schema e.g. {“map”: [ {“k”: {“int”: 2}, “v”: {“int”: 5}}, {“k”: {“map”: [{“k”: {“list”: [{“int”: 1}]}, “v”: {“bytes”: “FF03”}}]}, “v”: {“list”: []}} ]} From JSON:
- null/true/false/floats NOT supported
- the JSON must conform to a very specific schema To JSON:
- all Plutus datums should be fully supported outside of the integer range limitations outlined above.
Trait Implementations
sourceimpl Clone for PlutusDatumSchema
impl Clone for PlutusDatumSchema
sourcefn clone(&self) -> PlutusDatumSchema
fn clone(&self) -> PlutusDatumSchema
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl Debug for PlutusDatumSchema
impl Debug for PlutusDatumSchema
sourceimpl PartialEq<PlutusDatumSchema> for PlutusDatumSchema
impl PartialEq<PlutusDatumSchema> for PlutusDatumSchema
sourcefn eq(&self, other: &PlutusDatumSchema) -> bool
fn eq(&self, other: &PlutusDatumSchema) -> bool
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
impl Copy for PlutusDatumSchema
impl Eq for PlutusDatumSchema
impl StructuralEq for PlutusDatumSchema
impl StructuralPartialEq for PlutusDatumSchema
Auto Trait Implementations
impl RefUnwindSafe for PlutusDatumSchema
impl Send for PlutusDatumSchema
impl Sync for PlutusDatumSchema
impl Unpin for PlutusDatumSchema
impl UnwindSafe for PlutusDatumSchema
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more