Skip to main content

modelrelay/generated/
extensions.rs

1//! Extension traits for generated types.
2//!
3//! These traits add ergonomic methods to generated types without modifying them.
4//! This follows the "extension trait" pattern to add methods to foreign types.
5
6use std::fmt;
7
8use super::{MessageRole, ModelId, NodeId, PlanHash, Sha256Hash, TierCode};
9
10// ============================================================================
11// Display implementations for string newtypes
12// ============================================================================
13
14impl fmt::Display for NodeId {
15    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
16        // NodeId derefs to String
17        write!(f, "{}", &**self)
18    }
19}
20
21impl fmt::Display for ModelId {
22    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
23        write!(f, "{}", &**self)
24    }
25}
26
27impl fmt::Display for PlanHash {
28    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
29        write!(f, "{}", &**self)
30    }
31}
32
33impl fmt::Display for Sha256Hash {
34    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
35        write!(f, "{}", &**self)
36    }
37}
38
39impl fmt::Display for TierCode {
40    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
41        write!(f, "{}", &**self)
42    }
43}
44
45/// Extension trait for MessageRole providing convenience methods.
46pub trait MessageRoleExt {
47    /// Returns the string representation of the role.
48    fn as_str(&self) -> &'static str;
49}
50
51impl MessageRoleExt for MessageRole {
52    fn as_str(&self) -> &'static str {
53        match self {
54            MessageRole::User => "user",
55            MessageRole::Assistant => "assistant",
56            MessageRole::System => "system",
57            MessageRole::Tool => "tool",
58        }
59    }
60}
61
62#[cfg(test)]
63mod tests {
64    use super::*;
65
66    #[test]
67    fn message_role_as_str() {
68        assert_eq!(MessageRole::User.as_str(), "user");
69        assert_eq!(MessageRole::Assistant.as_str(), "assistant");
70        assert_eq!(MessageRole::System.as_str(), "system");
71        assert_eq!(MessageRole::Tool.as_str(), "tool");
72    }
73
74    #[test]
75    fn message_role_display() {
76        assert_eq!(MessageRole::User.to_string(), "user");
77        assert_eq!(MessageRole::Assistant.to_string(), "assistant");
78    }
79}