camel_component_grpc/
mode.rs1use 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}