#[derive(
Debug,
Clone,
Copy,
PartialEq,
Eq,
golem_schema_derive::IntoSchema,
golem_schema_derive::FromSchema,
)]
#[schema(named = "golem.tool.ProcessExitStatus")]
#[cfg_attr(
feature = "guest",
derive(
golem_schema_derive::WireSchema,
golem_schema_derive::IntoWire,
golem_schema_derive::FromWire
)
)]
pub struct ProcessExitStatus {
pub exit_code: u8,
}
#[cfg(test)]
mod tests {
use super::ProcessExitStatus;
use crate::{FromSchema, IntoSchema, SchemaType, SchemaValue, try_into_schema_graph};
use test_r::test;
#[test]
fn process_exit_status_has_the_cross_language_named_contract() {
let graph = try_into_schema_graph::<ProcessExitStatus>().unwrap();
assert_eq!(
graph.root,
SchemaType::ref_to("golem.tool.ProcessExitStatus".into())
);
let SchemaType::Record { fields, .. } = graph.resolve_ref(&graph.root).unwrap() else {
panic!("process status must be a record");
};
assert_eq!(fields.len(), 1);
assert_eq!(fields[0].name, "exit_code");
assert_eq!(fields[0].body, SchemaType::u8());
for code in [0, 7, 255] {
let status = ProcessExitStatus { exit_code: code };
let value = SchemaValue::Record {
fields: vec![SchemaValue::U8(code)],
};
assert_eq!(status.to_value(), value);
assert_eq!(ProcessExitStatus::from_value(&value).unwrap(), status);
}
}
}