Skip to content

Commit 39f8439

Browse files
authored
Merge pull request #177 from Emurgo/exprices-cddl-update
Update to recent change in ex_unit_prices cddl definition + Remove RedeemerTagEnum
2 parents c0819b7 + 6d41c22 commit 39f8439

File tree

2 files changed

+29
-81
lines changed

2 files changed

+29
-81
lines changed

rust/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ impl UnitInterval {
8787
}
8888
}
8989

90+
type SubCoin = UnitInterval;
9091
type Rational = UnitInterval;
9192
type Epoch = u32;
9293
type Slot = u32;

rust/src/plutus.rs

Lines changed: 28 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -145,23 +145,23 @@ impl Costmdls {
145145
#[wasm_bindgen]
146146
#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)]
147147
pub struct ExUnitPrices {
148-
mem_price: Coin,
149-
step_price: Coin,
148+
mem_price: SubCoin,
149+
step_price: SubCoin,
150150
}
151151

152152
to_from_bytes!(ExUnitPrices);
153153

154154
#[wasm_bindgen]
155155
impl ExUnitPrices {
156-
pub fn mem_price(&self) -> Coin {
156+
pub fn mem_price(&self) -> SubCoin {
157157
self.mem_price.clone()
158158
}
159159

160-
pub fn step_price(&self) -> Coin {
160+
pub fn step_price(&self) -> SubCoin {
161161
self.step_price.clone()
162162
}
163163

164-
pub fn new(mem_price: &Coin, step_price: &Coin) -> Self {
164+
pub fn new(mem_price: &SubCoin, step_price: &SubCoin) -> Self {
165165
Self {
166166
mem_price: mem_price.clone(),
167167
step_price: step_price.clone(),
@@ -434,54 +434,40 @@ impl Redeemer {
434434
}
435435

436436
#[wasm_bindgen]
437-
#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)]
437+
#[derive(Copy, Clone, Debug, Eq, Ord, PartialEq, PartialOrd)]
438438
pub enum RedeemerTagKind {
439439
Spend,
440440
Mint,
441441
Cert,
442442
Reward,
443443
}
444444

445-
// TODO: simplify these two into one struct if possible: see NetworkId
446-
#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)]
447-
enum RedeemerTagEnum {
448-
Spend,
449-
Mint,
450-
Cert,
451-
Reward,
452-
}
453-
454445
#[wasm_bindgen]
455446
#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)]
456-
pub struct RedeemerTag(RedeemerTagEnum);
447+
pub struct RedeemerTag(RedeemerTagKind);
457448

458449
to_from_bytes!(RedeemerTag);
459450

460451
#[wasm_bindgen]
461452
impl RedeemerTag {
462453
pub fn new_spend() -> Self {
463-
Self(RedeemerTagEnum::Spend)
454+
Self(RedeemerTagKind::Spend)
464455
}
465456

466457
pub fn new_mint() -> Self {
467-
Self(RedeemerTagEnum::Mint)
458+
Self(RedeemerTagKind::Mint)
468459
}
469460

470461
pub fn new_cert() -> Self {
471-
Self(RedeemerTagEnum::Cert)
462+
Self(RedeemerTagKind::Cert)
472463
}
473464

474465
pub fn new_reward() -> Self {
475-
Self(RedeemerTagEnum::Reward)
466+
Self(RedeemerTagKind::Reward)
476467
}
477468

478469
pub fn kind(&self) -> RedeemerTagKind {
479-
match &self.0 {
480-
RedeemerTagEnum::Spend => RedeemerTagKind::Spend,
481-
RedeemerTagEnum::Mint => RedeemerTagKind::Mint,
482-
RedeemerTagEnum::Cert => RedeemerTagKind::Cert,
483-
RedeemerTagEnum::Reward => RedeemerTagKind::Reward,
484-
}
470+
self.0
485471
}
486472
}
487473

@@ -722,10 +708,10 @@ impl Deserialize for ExUnitPrices {
722708
let mut read_len = CBORReadLen::new(len);
723709
read_len.read_elems(2)?;
724710
let mem_price = (|| -> Result<_, DeserializeError> {
725-
Ok(Coin::deserialize(raw)?)
711+
Ok(SubCoin::deserialize(raw)?)
726712
})().map_err(|e| e.annotate("mem_price"))?;
727713
let step_price = (|| -> Result<_, DeserializeError> {
728-
Ok(Coin::deserialize(raw)?)
714+
Ok(SubCoin::deserialize(raw)?)
729715
})().map_err(|e| e.annotate("step_price"))?;
730716
match len {
731717
cbor_event::Len::Len(_) => (),
@@ -1020,74 +1006,35 @@ impl Deserialize for Redeemer {
10201006
}
10211007
}
10221008

1023-
impl cbor_event::se::Serialize for RedeemerTagEnum {
1009+
impl cbor_event::se::Serialize for RedeemerTagKind {
10241010
fn serialize<'se, W: Write>(&self, serializer: &'se mut Serializer<W>) -> cbor_event::Result<&'se mut Serializer<W>> {
10251011
match self {
1026-
RedeemerTagEnum::Spend => {
1012+
RedeemerTagKind::Spend => {
10271013
serializer.write_unsigned_integer(0u64)
10281014
},
1029-
RedeemerTagEnum::Mint => {
1015+
RedeemerTagKind::Mint => {
10301016
serializer.write_unsigned_integer(1u64)
10311017
},
1032-
RedeemerTagEnum::Cert => {
1018+
RedeemerTagKind::Cert => {
10331019
serializer.write_unsigned_integer(2u64)
10341020
},
1035-
RedeemerTagEnum::Reward => {
1021+
RedeemerTagKind::Reward => {
10361022
serializer.write_unsigned_integer(3u64)
10371023
},
10381024
}
10391025
}
10401026
}
10411027

1042-
impl Deserialize for RedeemerTagEnum {
1028+
impl Deserialize for RedeemerTagKind {
10431029
fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
10441030
(|| -> Result<_, DeserializeError> {
1045-
let initial_position = raw.as_mut_ref().seek(SeekFrom::Current(0)).unwrap();
1046-
match (|raw: &mut Deserializer<_>| -> Result<_, DeserializeError> {
1047-
let i0_value = raw.unsigned_integer()?;
1048-
if i0_value != 0 {
1049-
return Err(DeserializeFailure::FixedValueMismatch{ found: Key::Uint(i0_value), expected: Key::Uint(0) }.into());
1050-
}
1051-
Ok(())
1052-
})(raw)
1053-
{
1054-
Ok(()) => return Ok(RedeemerTagEnum::Spend),
1055-
Err(_) => raw.as_mut_ref().seek(SeekFrom::Start(initial_position)).unwrap(),
1056-
};
1057-
match (|raw: &mut Deserializer<_>| -> Result<_, DeserializeError> {
1058-
let i1_value = raw.unsigned_integer()?;
1059-
if i1_value != 1 {
1060-
return Err(DeserializeFailure::FixedValueMismatch{ found: Key::Uint(i1_value), expected: Key::Uint(1) }.into());
1061-
}
1062-
Ok(())
1063-
})(raw)
1064-
{
1065-
Ok(()) => return Ok(RedeemerTagEnum::Mint),
1066-
Err(_) => raw.as_mut_ref().seek(SeekFrom::Start(initial_position)).unwrap(),
1067-
};
1068-
match (|raw: &mut Deserializer<_>| -> Result<_, DeserializeError> {
1069-
let i2_value = raw.unsigned_integer()?;
1070-
if i2_value != 2 {
1071-
return Err(DeserializeFailure::FixedValueMismatch{ found: Key::Uint(i2_value), expected: Key::Uint(2) }.into());
1072-
}
1073-
Ok(())
1074-
})(raw)
1075-
{
1076-
Ok(()) => return Ok(RedeemerTagEnum::Cert),
1077-
Err(_) => raw.as_mut_ref().seek(SeekFrom::Start(initial_position)).unwrap(),
1078-
};
1079-
match (|raw: &mut Deserializer<_>| -> Result<_, DeserializeError> {
1080-
let i3_value = raw.unsigned_integer()?;
1081-
if i3_value != 3 {
1082-
return Err(DeserializeFailure::FixedValueMismatch{ found: Key::Uint(i3_value), expected: Key::Uint(3) }.into());
1083-
}
1084-
Ok(())
1085-
})(raw)
1086-
{
1087-
Ok(()) => return Ok(RedeemerTagEnum::Reward),
1088-
Err(_) => raw.as_mut_ref().seek(SeekFrom::Start(initial_position)).unwrap(),
1089-
};
1090-
Err(DeserializeError::new("RedeemerTagEnum", DeserializeFailure::NoVariantMatched.into()))
1031+
match raw.unsigned_integer() {
1032+
Ok(0) => Ok(RedeemerTagKind::Spend),
1033+
Ok(1) => Ok(RedeemerTagKind::Mint),
1034+
Ok(2) => Ok(RedeemerTagKind::Cert),
1035+
Ok(3) => Ok(RedeemerTagKind::Reward),
1036+
Ok(_) | Err(_) => Err(DeserializeFailure::NoVariantMatched.into()),
1037+
}
10911038
})().map_err(|e| e.annotate("RedeemerTagEnum"))
10921039
}
10931040
}
@@ -1100,7 +1047,7 @@ impl cbor_event::se::Serialize for RedeemerTag {
11001047

11011048
impl Deserialize for RedeemerTag {
11021049
fn deserialize<R: BufRead + Seek>(raw: &mut Deserializer<R>) -> Result<Self, DeserializeError> {
1103-
Ok(Self(RedeemerTagEnum::deserialize(raw)?))
1050+
Ok(Self(RedeemerTagKind::deserialize(raw)?))
11041051
}
11051052
}
11061053

0 commit comments

Comments
 (0)