fix: redeemer could be missing

This commit is contained in:
rvcas 2024-08-08 19:05:35 -04:00 committed by KtorZ
parent 00b8a39236
commit 90d75d4a13
No known key found for this signature in database
GPG Key ID: 33173CB6F77F4277
1 changed files with 27 additions and 21 deletions

View File

@ -30,7 +30,8 @@ pub struct Validator {
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
pub datum: Option<Parameter>, pub datum: Option<Parameter>,
pub redeemer: Parameter, #[serde(skip_serializing_if = "Option::is_none")]
pub redeemer: Option<Parameter>,
#[serde(skip_serializing_if = "Vec::is_empty")] #[serde(skip_serializing_if = "Vec::is_empty")]
#[serde(default)] #[serde(default)]
@ -92,7 +93,8 @@ impl Validator {
plutus_version: &PlutusVersion, plutus_version: &PlutusVersion,
) -> Result<Validator, Error> { ) -> Result<Validator, Error> {
let mut args = func.arguments.iter().rev(); let mut args = func.arguments.iter().rev();
let (_, redeemer, datum) = (args.next(), args.next().unwrap(), args.next());
let (_, _, redeemer, datum) = (args.next(), args.next(), args.next(), args.next());
let mut definitions = Definitions::new(); let mut definitions = Definitions::new();
@ -142,23 +144,27 @@ impl Validator {
schema, schema,
}); });
let redeemer = Annotated::from_type( let redeemer = redeemer
modules.into(), .map(|redeemer| {
tipo_or_annotation(module, redeemer), Annotated::from_type(
&mut definitions, modules.into(),
) tipo_or_annotation(module, redeemer),
.map_err(|error| Error::Schema { &mut definitions,
error, )
location: redeemer.location, .map_err(|error| Error::Schema {
source_code: NamedSource::new( error,
module.input_path.display().to_string(), location: redeemer.location,
module.code.clone(), source_code: NamedSource::new(
), module.input_path.display().to_string(),
}) module.code.clone(),
.map(|schema| Parameter { ),
title: Some(redeemer.arg_name.get_label()), })
schema, })
})?; .transpose()?
.map(|schema| Parameter {
title: redeemer.map(|redeemer| redeemer.arg_name.get_label()),
schema,
});
Ok(Validator { Ok(Validator {
title: format!("{}.{}_{}", &module.name, &def.name, &func.name), title: format!("{}.{}_{}", &module.name, &def.name, &func.name),
@ -494,7 +500,7 @@ mod tests {
assert_validator!( assert_validator!(
r#" r#"
validator generics { validator generics {
spend(redeemer: a, ctx: Void) { mint(redeemer: a, policy_id: ByteArray, ctx: Void) {
True True
} }
} }
@ -569,7 +575,7 @@ mod tests {
} }
validator opaque_singleton_multi_variants { validator opaque_singleton_multi_variants {
spend(redeemer: Rational, ctx: Void) { spend(redeemer: Rational, oref: Data, ctx: Void) {
True True
} }
} }