Skip to main content

solti_api/grpc/convert/
condition.rs

1//! # Condition Conversion
2//!
3//! Converts domain task conditions into protobuf response values.
4
5use solti_model::{ConditionStatus, TaskCondition};
6
7use super::time::system_time_to_ms;
8use crate::error::ApiError;
9use crate::proto_api;
10
11impl TryFrom<ConditionStatus> for proto_api::ConditionStatus {
12    type Error = ApiError;
13
14    fn try_from(status: ConditionStatus) -> Result<Self, Self::Error> {
15        Ok(match status {
16            ConditionStatus::Unknown => Self::Unknown,
17            ConditionStatus::True => Self::True,
18            ConditionStatus::False => Self::False,
19            _ => {
20                return Err(ApiError::Internal(
21                    "handler returned an unsupported condition status".into(),
22                ));
23            }
24        })
25    }
26}
27
28impl TryFrom<TaskCondition> for proto_api::TaskCondition {
29    type Error = ApiError;
30
31    fn try_from(condition: TaskCondition) -> Result<Self, Self::Error> {
32        let (condition_type, status, observed_generation, transition_time, reason, message) =
33            condition.into_parts();
34        Ok(Self {
35            r#type: condition_type.to_string(),
36            status: proto_api::ConditionStatus::try_from(status)? as i32,
37            observed_generation,
38            last_transition_time: system_time_to_ms(transition_time)?,
39            reason,
40            message,
41        })
42    }
43}