Function pact_models::pact::parse_meta_data
source · Expand description
Construct Metadata from JSON value
Examples found in repository?
src/sync_pact.rs (line 168)
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
pub fn from_json(file: &str, pact_json: &Value
) -> anyhow::Result<RequestResponsePact> {
let metadata = parse_meta_data(pact_json);
let spec_version = determine_spec_version(file, &metadata);
let consumer = match pact_json.get("consumer") {
Some(v) => Consumer::from_json(v),
None => Consumer { name: "consumer".to_string() }
};
let provider = match pact_json.get("provider") {
Some(v) => Provider::from_json(v),
None => Provider { name: "provider".to_string() }
};
Ok(RequestResponsePact {
consumer,
provider,
interactions: parse_interactions(pact_json, spec_version.clone())?,
metadata,
specification_version: spec_version,
})
}More examples
src/pact.rs (line 173)
170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
pub fn load_pact_from_json(source: &str, json: &Value) -> anyhow::Result<Box<dyn Pact + Send + Sync>> {
match json {
Value::Object(map) => {
let metadata = parse_meta_data(json);
let spec_version = determine_spec_version(source, &metadata);
trace!("load_pact_from_json: found spec version {} in metadata", spec_version);
match spec_version {
PactSpecification::V4 => v4::pact::from_json(&source, json),
_ => if map.contains_key("messages") {
trace!("load_pact_from_json: JSON has a messages attribute, will load as a message pact");
let pact = MessagePact::from_json(source, json)?;
Ok(Box::new(pact))
} else {
trace!("load_pact_from_json: loading JSON as a request/response pact");
Ok(Box::new(RequestResponsePact::from_json(source, json)?))
}
}
},
_ => Err(anyhow!("Failed to parse Pact JSON from source '{}' - it is not a valid pact file", source))
}
}src/message_pact.rs (line 174)
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
pub fn from_json(file: &str, pact_json: &Value) -> anyhow::Result<MessagePact> {
let metadata = parse_meta_data(pact_json);
let spec_version = determine_spec_version(file, &metadata);
let consumer = match pact_json.get("consumer") {
Some(v) => Consumer::from_json(v),
None => Consumer { name: "consumer".to_string() }
};
let provider = match pact_json.get("provider") {
Some(v) => Provider::from_json(v),
None => Provider { name: "provider".to_string() }
};
let messages = match pact_json.get("messages") {
Some(Value::Array(msg_arr)) => {
let mut messages = Vec::with_capacity(msg_arr.len());
for (ix, msg) in msg_arr.iter().enumerate() {
messages.push(
Message::from_json(ix, msg, &spec_version)?
);
}
messages
}
Some(_) => bail!("Expecting 'messages' field to be Array"),
None => vec![],
};
Ok(MessagePact {
consumer,
provider,
messages,
metadata,
specification_version: spec_version.clone(),
})
}