turul_mcp_builders/traits/
completion_traits.rs1use turul_mcp_protocol::completion::{
6 CompleteArgument, CompleteRequest, CompletionContext, CompletionReference,
7};
8
9pub trait HasCompletionMetadata {
11 fn method(&self) -> &str;
13
14 fn reference(&self) -> &CompletionReference;
16}
17
18pub trait HasCompletionContext {
20 fn argument(&self) -> &CompleteArgument;
22
23 fn context(&self) -> Option<&CompletionContext> {
25 None
26 }
27}
28
29pub trait HasCompletionHandling {
31 fn validate_request(&self, _request: &CompleteRequest) -> Result<(), String> {
33 Ok(())
34 }
35
36 fn filter_completions(&self, values: Vec<String>, current_value: &str) -> Vec<String> {
38 values
40 .into_iter()
41 .filter(|v| v.to_lowercase().starts_with(¤t_value.to_lowercase()))
42 .collect()
43 }
44}
45
46pub trait CompletionDefinition:
52 HasCompletionMetadata + HasCompletionContext + HasCompletionHandling
53{
54 fn to_complete_request(&self) -> CompleteRequest {
56 let mut request = CompleteRequest::new(self.reference().clone(), self.argument().clone());
57 if let Some(context) = self.context() {
58 request = request.with_context(context.clone());
59 }
60 request
61 }
62}
63
64impl<T> CompletionDefinition for T where
66 T: HasCompletionMetadata + HasCompletionContext + HasCompletionHandling
67{
68}