pub fn intern(s: &str) -> Arc<str>Expand description
Interns a string in the global pool
Examples found in repository?
examples/benchmark.rs (line 308)
300fn bench_memory_optimizations() {
301 println!("\n=== Memory Optimization Benchmarks ===");
302
303 // Test string interning
304 let bench = Benchmark::new("String interning (100 strings)", 1_000);
305 let duration = bench.run(|| {
306 use flag_rs::string_pool;
307 for i in 0..100 {
308 let _ = string_pool::intern(&format!("flag{i}"));
309 }
310 });
311 bench.report(duration);
312
313 // Test optimized completion
314 let bench = Benchmark::new("Optimized completion result", 1_000);
315 let duration = bench.run(|| {
316 use flag_rs::completion_optimized::CompletionResultOptimized;
317 use std::borrow::Cow;
318
319 let mut result = CompletionResultOptimized::new();
320 for i in 0..50 {
321 result = result.add_with_description(
322 Cow::Owned(format!("item{i}")),
323 Cow::Borrowed("Static description"),
324 );
325 }
326 let _ = result.into_legacy();
327 });
328 bench.report(duration);
329}More examples
examples/memory_optimization_demo.rs (line 18)
12fn create_many_subcommands(parent: &mut flag_rs::Command) {
13 // Simulate a large CLI with 100 subcommands
14 for i in 0..100 {
15 let cmd_name = format!("service-{i:03}");
16
17 // Use string interning for flag names that repeat across commands
18 let namespace_flag_name = string_pool::intern("namespace");
19 let region_flag_name = string_pool::intern("region");
20 let env_flag_name = string_pool::intern("environment");
21
22 let cmd = CommandBuilder::new(cmd_name.clone())
23 .short(format!("Manage service {i}"))
24 .flag(
25 Flag::new(namespace_flag_name.to_string())
26 .short('n')
27 .usage("Kubernetes namespace")
28 .value_type(FlagType::String)
29 .default(flag_rs::FlagValue::String("default".to_string())),
30 )
31 .flag(
32 Flag::new(region_flag_name.to_string())
33 .short('r')
34 .usage("AWS region")
35 .value_type(FlagType::Choice(vec![
36 "us-east-1".to_string(),
37 "us-west-2".to_string(),
38 "eu-west-1".to_string(),
39 "ap-southeast-1".to_string(),
40 ]))
41 .default(flag_rs::FlagValue::String("us-east-1".to_string())),
42 )
43 .flag(
44 Flag::new(env_flag_name.to_string())
45 .short('e')
46 .usage("Deployment environment")
47 .value_type(FlagType::Choice(vec![
48 "dev".to_string(),
49 "staging".to_string(),
50 "prod".to_string(),
51 ]))
52 .default(flag_rs::FlagValue::String("dev".to_string())),
53 )
54 .subcommand(
55 CommandBuilder::new("deploy")
56 .short("Deploy the service")
57 .arg_completion(move |_ctx, prefix| {
58 // Use optimized completion result
59 let optimized = CompletionResultOptimized::new()
60 .add(Cow::Borrowed("rolling-update"))
61 .add(Cow::Borrowed("blue-green"))
62 .add(Cow::Borrowed("canary"))
63 .add_with_description(
64 Cow::Borrowed("recreate"),
65 Cow::Borrowed("Recreate all pods"),
66 );
67
68 // Filter based on prefix
69 let filtered = CompletionResultOptimized::new().extend_items(
70 optimized
71 .items
72 .into_iter()
73 .filter(|item| item.value.starts_with(prefix)),
74 );
75
76 // Convert to legacy format for compatibility
77 Ok(filtered.into_legacy())
78 })
79 .build(),
80 )
81 .subcommand(
82 CommandBuilder::new("scale")
83 .short("Scale the service")
84 .flag(
85 Flag::new("replicas")
86 .usage("Number of replicas")
87 .value_type(FlagType::Int)
88 .required(),
89 )
90 .build(),
91 )
92 .subcommand(
93 CommandBuilder::new("logs")
94 .short("View service logs")
95 .flag(
96 Flag::new("follow")
97 .short('f')
98 .usage("Follow log output")
99 .value_type(FlagType::Bool),
100 )
101 .flag(
102 Flag::new("tail")
103 .usage("Number of lines to show")
104 .value_type(FlagType::Int)
105 .default(flag_rs::FlagValue::Int(100)),
106 )
107 .build(),
108 )
109 .build();
110
111 parent.add_command(cmd);
112 }
113}