Skip to main content

camel_component_grpc/
mode.rs

1use prost_reflect::MethodDescriptor;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4pub enum GrpcMode {
5    Unary,
6    ServerStreaming,
7    ClientStreaming,
8    Bidi,
9}
10
11impl GrpcMode {
12    pub fn from_method(method: &MethodDescriptor) -> Self {
13        match (method.is_server_streaming(), method.is_client_streaming()) {
14            (false, false) => GrpcMode::Unary,
15            (true, false) => GrpcMode::ServerStreaming,
16            (false, true) => GrpcMode::ClientStreaming,
17            (true, true) => GrpcMode::Bidi,
18        }
19    }
20}
21
22#[cfg(test)]
23mod tests {
24    use super::*;
25
26    #[test]
27    fn test_grpc_mode_variants_exist() {
28        let _ = GrpcMode::Unary;
29        let _ = GrpcMode::ServerStreaming;
30        let _ = GrpcMode::ClientStreaming;
31        let _ = GrpcMode::Bidi;
32    }
33
34    #[test]
35    fn test_grpc_mode_equality() {
36        assert_eq!(GrpcMode::Unary, GrpcMode::Unary);
37        assert_ne!(GrpcMode::Unary, GrpcMode::Bidi);
38        assert_eq!(GrpcMode::ServerStreaming, GrpcMode::ServerStreaming);
39        assert_ne!(GrpcMode::ClientStreaming, GrpcMode::ServerStreaming);
40    }
41
42    #[test]
43    fn test_grpc_mode_copy_and_clone() {
44        let mode = GrpcMode::Unary;
45        let copied = mode;
46        #[allow(clippy::clone_on_copy)]
47        let cloned = mode.clone();
48        assert_eq!(mode, copied);
49        assert_eq!(mode, cloned);
50    }
51
52    #[test]
53    fn test_grpc_mode_debug() {
54        let debug_unary = format!("{:?}", GrpcMode::Unary);
55        assert!(debug_unary.contains("Unary"));
56
57        let debug_bidi = format!("{:?}", GrpcMode::Bidi);
58        assert!(debug_bidi.contains("Bidi"));
59    }
60
61    #[test]
62    fn test_grpc_mode_all_variants_distinct() {
63        let modes = [
64            GrpcMode::Unary,
65            GrpcMode::ServerStreaming,
66            GrpcMode::ClientStreaming,
67            GrpcMode::Bidi,
68        ];
69        for (i, a) in modes.iter().enumerate() {
70            for (j, b) in modes.iter().enumerate() {
71                if i == j {
72                    assert_eq!(a, b);
73                } else {
74                    assert_ne!(a, b);
75                }
76            }
77        }
78    }
79}