1use super::BuildTargetIdentifier;
2use lsp_types::Url;
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Default, Serialize, Deserialize)]
6pub struct BuildTargetSources {
11 targets: Vec<BuildTargetIdentifier>,
12}
13
14impl BuildTargetSources {
15 pub fn new(targets: Vec<BuildTargetIdentifier>) -> Self {
16 Self { targets }
17 }
18
19 pub fn targets(&self) -> &[BuildTargetIdentifier] {
21 self.targets.as_ref()
22 }
23
24 pub fn set_targets(&mut self, targets: Vec<BuildTargetIdentifier>) {
26 self.targets = targets;
27 }
28}
29
30#[derive(Debug, Default, Serialize, Deserialize)]
31pub struct BuildTargetSourcesResult {
32 items: Vec<SourcesCollection>,
33}
34
35impl BuildTargetSourcesResult {
36 pub fn new(items: Vec<SourcesCollection>) -> Self {
37 Self { items }
38 }
39
40 pub fn items(&self) -> &[SourcesCollection] {
42 self.items.as_ref()
43 }
44
45 pub fn set_items(&mut self, items: Vec<SourcesCollection>) {
47 self.items = items;
48 }
49}
50
51#[derive(Debug, Serialize, Deserialize)]
52pub struct SourcesCollection {
53 target: BuildTargetIdentifier,
54
55 sources: Vec<Sources>,
57}
58
59impl SourcesCollection {
60 pub fn new(target: BuildTargetIdentifier, sources: Vec<Sources>) -> Self {
61 Self { target, sources }
62 }
63
64 pub fn target(&self) -> &BuildTargetIdentifier {
66 &self.target
67 }
68
69 pub fn set_target(&mut self, target: BuildTargetIdentifier) {
71 self.target = target;
72 }
73
74 pub fn sources(&self) -> &[Sources] {
76 self.sources.as_ref()
77 }
78
79 pub fn set_sources(&mut self, sources: Vec<Sources>) {
81 self.sources = sources;
82 }
83}
84
85#[derive(Debug, Serialize, Deserialize)]
86pub struct Sources {
87 uri: Url,
91
92 kind: SourceKind,
94
95 generated: bool,
98}
99
100impl Sources {
101 pub fn new(uri: Url, kind: SourceKind, generated: bool) -> Self {
105 Self {
106 uri,
107 kind,
108 generated,
109 }
110 }
111
112 pub fn kind(&self) -> &SourceKind {
114 &self.kind
115 }
116
117 pub fn set_kind(&mut self, kind: SourceKind) {
119 self.kind = kind;
120 }
121
122 pub fn uri(&self) -> &Url {
124 &self.uri
125 }
126
127 pub fn set_uri(&mut self, uri: Url) {
129 self.uri = uri;
130 }
131
132 pub fn generated(&self) -> bool {
134 self.generated
135 }
136
137 pub fn set_generated(&mut self, generated: bool) {
139 self.generated = generated;
140 }
141}
142
143#[derive(Debug, serde_repr::Deserialize_repr, serde_repr::Serialize_repr)]
144#[repr(u16)]
145pub enum SourceKind {
146 File = 1,
148 Directory = 2,
150}
151
152impl Default for SourceKind {
153 fn default() -> Self {
154 Self::File
155 }
156}