better data deserialization errors and test hint

now runs even being in a sequence
This commit is contained in:
Kasey White
2022-12-29 18:20:13 -05:00
committed by Lucas
parent ee678f2978
commit b0ea187151
3 changed files with 62 additions and 16 deletions

View File

@@ -44,8 +44,8 @@ pub enum Error {
UnexpectedEd25519PublicKeyLength(usize),
#[error("Ed25519S Signature should be 64 bytes but it was {0}")]
UnexpectedEd25519SignatureLength(usize),
#[error("Failed to deserialise PlutusData:\n\n{0:#?}")]
DeserialisationError(Value),
#[error("Failed to deserialise PlutusData using {0}:\n\n{1:#?}")]
DeserialisationError(String, Value),
#[error("Integer overflow")]
OverflowError,
}

View File

@@ -769,7 +769,10 @@ impl DefaultFunction {
)),
)))
}
v => Err(Error::DeserialisationError(v.clone())),
v => Err(Error::DeserialisationError(
"UnConstrData".to_string(),
v.clone(),
)),
},
DefaultFunction::UnMapData => match &args[0] {
Value::Con(Constant::Data(PlutusData::Map(m))) => {
@@ -788,7 +791,10 @@ impl DefaultFunction {
.collect(),
)))
}
v => Err(Error::DeserialisationError(v.clone())),
v => Err(Error::DeserialisationError(
"UnMapData".to_string(),
v.clone(),
)),
},
DefaultFunction::UnListData => match &args[0] {
Value::Con(Constant::Data(PlutusData::Array(l))) => {
@@ -800,7 +806,10 @@ impl DefaultFunction {
.collect(),
)))
}
v => Err(Error::DeserialisationError(v.clone())),
v => Err(Error::DeserialisationError(
"UnListData".to_string(),
v.clone(),
)),
},
DefaultFunction::UnIData => match &args[0] {
Value::Con(Constant::Data(PlutusData::BigInt(b))) => {
@@ -812,13 +821,19 @@ impl DefaultFunction {
unreachable!()
}
}
v => Err(Error::DeserialisationError(v.clone())),
v => Err(Error::DeserialisationError(
"UnIData".to_string(),
v.clone(),
)),
},
DefaultFunction::UnBData => match &args[0] {
Value::Con(Constant::Data(PlutusData::BoundedBytes(b))) => {
Ok(Value::Con(Constant::ByteString(b.to_vec())))
}
v => Err(Error::DeserialisationError(v.clone())),
v => Err(Error::DeserialisationError(
"UnBData".to_string(),
v.clone(),
)),
},
DefaultFunction::EqualsData => match (&args[0], &args[1]) {
(Value::Con(Constant::Data(d1)), Value::Con(Constant::Data(d2))) => {