From bf222a3ea221490b772efef835cc60e18639161d Mon Sep 17 00:00:00 2001 From: KtorZ Date: Fri, 7 Apr 2023 17:38:37 +0200 Subject: [PATCH] Fix reference JSON deserialization. --- .../aiken-project/src/blueprint/definitions.rs | 13 ++++++++++--- crates/aiken-project/src/blueprint/schema.rs | 18 +++++++++--------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/crates/aiken-project/src/blueprint/definitions.rs b/crates/aiken-project/src/blueprint/definitions.rs index b72b3a3c..98b7211f 100644 --- a/crates/aiken-project/src/blueprint/definitions.rs +++ b/crates/aiken-project/src/blueprint/definitions.rs @@ -224,9 +224,16 @@ impl<'a> Deserialize<'a> for Reference { } } - Ok(Reference { - inner: inner.ok_or_else(|| de::Error::missing_field(FIELDS[0]))?, - }) + let inner: String = inner.ok_or_else(|| de::Error::missing_field(FIELDS[0]))?; + + match inner.strip_prefix("#/definitions/") { + Some(suffix) => Ok(Reference { + inner: suffix.to_string(), + }), + None => Err(de::Error::custom( + "Invalid reference; only local JSON pointer to #/definitions are allowed.", + )), + } } } diff --git a/crates/aiken-project/src/blueprint/schema.rs b/crates/aiken-project/src/blueprint/schema.rs index c35202a3..41f5f2d0 100644 --- a/crates/aiken-project/src/blueprint/schema.rs +++ b/crates/aiken-project/src/blueprint/schema.rs @@ -1244,7 +1244,7 @@ pub mod test { Data::List(Items::One(Declaration::Referenced(Reference::new("foo")))), serde_json::from_value(json!({ "dataType": "list", - "items": { "$ref": "foo" } + "items": { "$ref": "#/definitions/foo" } })) .unwrap() ) @@ -1260,8 +1260,8 @@ pub mod test { serde_json::from_value(json!({ "dataType": "list", "items": [ - { "$ref": "foo" }, - { "$ref": "bar" } + { "$ref": "#/definitions/foo" }, + { "$ref": "#/definitions/bar" } ], })) .unwrap() @@ -1277,8 +1277,8 @@ pub mod test { ), serde_json::from_value(json!({ "dataType": "map", - "keys": { "$ref": "foo" }, - "values": { "$ref": "bar" } + "keys": { "$ref": "#/definitions/foo" }, + "values": { "$ref": "#/definitions/bar" } })) .unwrap() ) @@ -1300,10 +1300,10 @@ pub mod test { "index": 0, "fields": [ { - "$ref": "foo", + "$ref": "#/definitions/foo", }, { - "$ref": "bar", + "$ref": "#/definitions/bar", } ] }] @@ -1328,10 +1328,10 @@ pub mod test { "index": 0, "fields": [ { - "$ref": "foo", + "$ref": "#/definitions/foo", }, { - "$ref": "bar", + "$ref": "#/definitions/bar", } ] }]