capability_example/
clipboard_snippet.rs1crate::ix!();
3
4pub fn precise_parse_clipboard_stripped_skeleton() -> Result<StrippedStringSkeleton, std::io::Error> {
6 let mut ctx = ClipboardContext::new().map_err(|e| {
7 std::io::Error::new(std::io::ErrorKind::Other, format!("Clipboard context error: {e}"))
8 })?;
9 let contents = ctx.get_contents().map_err(|e| {
10 std::io::Error::new(std::io::ErrorKind::Other, format!("Clipboard get_contents error: {e}"))
11 })?;
12 let json_val: serde_json::Value = serde_json::from_str(&contents).map_err(|e| {
13 std::io::Error::new(std::io::ErrorKind::InvalidData, format!("Clipboard JSON parse error: {e}"))
14 })?;
15 let parsed = try_deserialize_with_path::<StrippedStringSkeleton>(&json_val).map_err(|e| {
16 std::io::Error::new(std::io::ErrorKind::InvalidData, format!("StrippedStringSkeleton parse error: {e}"))
17 })?;
18 Ok(parsed)
19}
20
21#[derive(Debug)]
23pub enum ClipboardSnippet {
24 JustifiedGrowerTreeConfiguration(JustifiedGrowerTreeConfiguration),
25 JustifiedStringSkeleton(JustifiedStringSkeleton),
26 StrippedStringSkeleton(StrippedStringSkeleton),
27 CoreStringSkeleton(CoreStringSkeleton),
28 AnnotatedLeafHolderExpansions(AnnotatedLeafHolderExpansions),
29}
30
31impl ClipboardSnippet {
32
33 pub fn target_name(&self) -> Option<&String> {
35 match self {
36 ClipboardSnippet::JustifiedGrowerTreeConfiguration(cfg) => Some(cfg.target_name()),
37 ClipboardSnippet::JustifiedStringSkeleton(sk) => Some(sk.target_name()),
38 ClipboardSnippet::StrippedStringSkeleton(sk) => Some(sk.target_name()),
39 ClipboardSnippet::CoreStringSkeleton(sk) => Some(sk.target_name()),
40 ClipboardSnippet::AnnotatedLeafHolderExpansions(ann) => Some(ann.target_name()),
41 }
42 }
43
44 pub fn matches_missing_field(
46 &self,
47 missing: Option<GrowerModelGenerationInvalidPartial>
48 ) -> bool {
49 use GrowerModelGenerationInvalidPartial::*;
50 match (missing, self) {
51 (Some(MissingJustifiedGrowerTreeConfiguration), ClipboardSnippet::JustifiedGrowerTreeConfiguration(_)) => true,
52 (Some(MissingJustifiedStringSkeleton), ClipboardSnippet::JustifiedStringSkeleton(_)) => true,
53 (Some(MissingStrippedStringSkeleton), ClipboardSnippet::StrippedStringSkeleton(_)) => true,
54 (Some(MissingCoreStringSkeleton), ClipboardSnippet::CoreStringSkeleton(_)) => true,
55 (Some(MissingAnnotatedLeafHolderExpansions), ClipboardSnippet::AnnotatedLeafHolderExpansions(_)) => true,
56 _ => false,
57 }
58 }
59}
60
61pub trait ApplyClipboardSnippet {
62
63 fn apply_clipboard_snippet(&mut self, snippet: ClipboardSnippet);
64}
65
66impl ApplyClipboardSnippet for PartiallyGrownModel {
67
68 fn apply_clipboard_snippet(&mut self, snippet: ClipboardSnippet) {
70 match snippet {
71 ClipboardSnippet::JustifiedGrowerTreeConfiguration(cfg) => {
72 self.set_maybe_ungrown_justified_grower_tree_configuration(Some(cfg));
73 }
74 ClipboardSnippet::JustifiedStringSkeleton(sk) => {
75 self.set_maybe_ungrown_justified_string_skeleton(Some(sk));
76 }
77 ClipboardSnippet::StrippedStringSkeleton(sk) => {
78 self.set_maybe_ungrown_stripped_string_skeleton(Some(sk));
79 }
80 ClipboardSnippet::CoreStringSkeleton(sk) => {
81 self.set_maybe_ungrown_core_string_skeleton(Some(sk));
82 }
83 ClipboardSnippet::AnnotatedLeafHolderExpansions(ann) => {
84 self.set_maybe_ungrown_annotated_leaf_holder_expansions(Some(ann));
85 }
86 }
87 }
88}
89
90pub fn missing_field_rank(missing: &Option<GrowerModelGenerationInvalidPartial>) -> i32 {
98 use GrowerModelGenerationInvalidPartial::*;
99 match missing {
100 None => 0,
101 Some(MissingJustifiedGrowerTreeConfiguration) => 1,
102 Some(MissingJustifiedStringSkeleton) => 2,
103 Some(MissingStrippedStringSkeleton) => 3,
104 Some(MissingCoreStringSkeleton) => 4,
105 Some(MissingAnnotatedLeafHolderExpansions) => 5,
106 }
107}
108
109pub fn snippet_field_rank(snippet: &ClipboardSnippet) -> i32 {
111 match snippet {
112 ClipboardSnippet::JustifiedGrowerTreeConfiguration(_) => 1,
113 ClipboardSnippet::JustifiedStringSkeleton(_) => 2,
114 ClipboardSnippet::StrippedStringSkeleton(_) => 3,
115 ClipboardSnippet::CoreStringSkeleton(_) => 4,
116 ClipboardSnippet::AnnotatedLeafHolderExpansions(_) => 5,
117 }
118}