1use clap::Subcommand;
2use std::path::PathBuf;
3
4#[derive(Debug, Clone, clap::ValueEnum)]
5pub enum HashAlgorithmChoice {
6 Sha256,
7 Sha384,
8 Sha512,
9}
10
11impl HashAlgorithmChoice {
12 pub fn to_cose_algorithm(&self) -> atlas_c2pa_lib::cose::HashAlgorithm {
13 match self {
14 HashAlgorithmChoice::Sha256 => atlas_c2pa_lib::cose::HashAlgorithm::Sha256,
15 HashAlgorithmChoice::Sha384 => atlas_c2pa_lib::cose::HashAlgorithm::Sha384,
16 HashAlgorithmChoice::Sha512 => atlas_c2pa_lib::cose::HashAlgorithm::Sha512,
17 }
18 }
19}
20
21#[derive(Debug, Subcommand)]
22pub enum DatasetCommands {
23 Create {
25 #[arg(long = "paths", num_args = 1.., value_delimiter = ',')]
26 paths: Vec<PathBuf>,
27
28 #[arg(long = "ingredient-names", num_args = 1.., value_delimiter = ',')]
30 ingredient_names: Vec<String>,
31
32 #[arg(long = "name")]
34 name: String,
35
36 #[arg(long = "author-org")]
38 author_org: Option<String>,
39
40 #[arg(long = "author-name")]
42 author_name: Option<String>,
43
44 #[arg(long = "description")]
46 description: Option<String>,
47
48 #[arg(long = "linked-manifests")]
50 linked_manifests: Option<Vec<String>>,
51
52 #[arg(long = "key")]
54 key: Option<PathBuf>,
55
56 #[arg(long = "hash-alg", value_enum, default_value = "sha384")]
58 hash_alg: HashAlgorithmChoice,
59
60 #[arg(long = "print")]
62 print: bool,
63
64 #[arg(long = "encoding", default_value = "json")]
66 encoding: String,
67
68 #[arg(long = "storage-type", default_value = "database")]
70 storage_type: Box<String>,
71
72 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
74 storage_url: Box<String>,
75
76 #[arg(long = "with-tdx", default_value = "false")]
78 with_tdx: bool,
79 },
80 List {
82 #[arg(long = "storage-type", default_value = "database")]
84 storage_type: Box<String>,
85
86 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
88 storage_url: Box<String>,
89 },
90 Verify {
91 #[arg(long = "id")]
93 id: String,
94 #[arg(long = "storage-type", default_value = "database")]
96 storage_type: Box<String>,
97
98 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
100 storage_url: Box<String>,
101 },
102}
103
104#[derive(Debug, Subcommand)]
105pub enum ModelCommands {
106 Create {
108 #[arg(long = "paths", num_args = 1.., value_delimiter = ',')]
110 paths: Vec<PathBuf>,
111
112 #[arg(long = "ingredient-names", num_args = 1.., value_delimiter = ',')]
114 ingredient_names: Vec<String>,
115
116 #[arg(long = "name")]
118 name: String,
119
120 #[arg(long = "author-org")]
122 author_org: Option<String>,
123
124 #[arg(long = "author-name")]
126 author_name: Option<String>,
127
128 #[arg(long = "description")]
130 description: Option<String>,
131
132 #[arg(long = "linked-manifests")]
134 linked_manifests: Option<Vec<String>>,
135
136 #[arg(long = "key")]
138 key: Option<PathBuf>,
139
140 #[arg(long = "hash-alg", value_enum, default_value = "sha384")]
142 hash_alg: HashAlgorithmChoice,
143
144 #[arg(long = "print")]
146 print: bool,
147
148 #[arg(long = "encoding", default_value = "json")]
150 encoding: String,
151
152 #[arg(long = "format", default_value = "standalone")]
154 format: String,
155
156 #[arg(long = "storage-type", default_value = "database")]
158 storage_type: Box<String>,
159
160 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
162 storage_url: Box<String>,
163
164 #[arg(long = "with-tdx", default_value = "false")]
166 with_tdx: bool,
167 },
168 List {
170 #[arg(long = "storage-type", default_value = "database")]
172 storage_type: Box<String>,
173
174 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
176 storage_url: Box<String>,
177 },
178 Verify {
179 #[arg(long = "id")]
181 id: String,
182 #[arg(long = "storage-type", default_value = "database")]
184 storage_type: Box<String>,
185
186 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
188 storage_url: Box<String>,
189 },
190 LinkDataset {
191 #[arg(long = "model-id")]
193 model_id: String,
194
195 #[arg(long = "dataset-id")]
197 dataset_id: String,
198
199 #[arg(long = "storage-type", default_value = "database")]
201 storage_type: Box<String>,
202
203 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
205 storage_url: Box<String>,
206 },
207}
208
209#[derive(Subcommand)]
210pub enum ManifestCommands {
211 Link {
213 #[arg(short, long)]
215 source: String,
216
217 #[arg(short, long)]
219 target: String,
220
221 #[arg(long = "storage-type", default_value = "database")]
223 storage_type: Box<String>,
224
225 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
227 storage_url: Box<String>,
228 },
229
230 Show {
232 #[arg(short, long)]
234 id: String,
235
236 #[arg(long = "storage-type", default_value = "database")]
238 storage_type: Box<String>,
239
240 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
242 storage_url: Box<String>,
243 },
244
245 Validate {
247 #[arg(short, long)]
249 id: String,
250
251 #[arg(long = "storage-type", default_value = "database")]
253 storage_type: Box<String>,
254
255 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
257 storage_url: Box<String>,
258 },
259
260 VerifyLink {
262 #[arg(short, long)]
264 source: String,
265
266 #[arg(short, long)]
268 target: String,
269
270 #[arg(long = "storage-type", default_value = "database")]
272 storage_type: Box<String>,
273
274 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
276 storage_url: Box<String>,
277 },
278 Export {
280 #[arg(short, long)]
282 id: String,
283
284 #[arg(long = "storage-type", default_value = "database")]
286 storage_type: Box<String>,
287
288 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
290 storage_url: Box<String>,
291
292 #[arg(long = "encoding", default_value = "json")]
294 encoding: String,
295
296 #[arg(short, long)]
298 output: Option<String>,
299
300 #[arg(long = "max-depth", default_value = "10")]
302 max_depth: u32,
303 },
304}
305#[derive(Subcommand)]
307pub enum EvaluationCommands {
308 Create {
310 #[arg(long = "path")]
312 path: PathBuf,
313
314 #[arg(long = "name")]
316 name: String,
317
318 #[arg(long = "model-id")]
320 model_id: String,
321
322 #[arg(long = "dataset-id")]
324 dataset_id: String,
325
326 #[arg(long = "metrics", num_args = 1.., value_delimiter = ',')]
328 metrics: Vec<String>,
329
330 #[arg(long = "author-org")]
332 author_org: Option<String>,
333
334 #[arg(long = "author-name")]
336 author_name: Option<String>,
337
338 #[arg(long = "description")]
340 description: Option<String>,
341
342 #[arg(long = "key")]
344 key: Option<PathBuf>,
345
346 #[arg(long = "hash-alg", value_enum, default_value = "sha384")]
348 hash_alg: HashAlgorithmChoice,
349
350 #[arg(long = "print")]
352 print: bool,
353
354 #[arg(long = "encoding", default_value = "json")]
356 encoding: String,
357
358 #[arg(long = "storage-type", default_value = "database")]
360 storage_type: Box<String>,
361
362 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
364 storage_url: Box<String>,
365 },
366
367 List {
369 #[arg(long = "storage-type", default_value = "database")]
371 storage_type: Box<String>,
372
373 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
375 storage_url: Box<String>,
376 },
377
378 Verify {
380 #[arg(long = "id")]
382 id: String,
383
384 #[arg(long = "storage-type", default_value = "database")]
386 storage_type: Box<String>,
387
388 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
390 storage_url: Box<String>,
391 },
392}
393
394#[derive(Subcommand)]
397pub enum CCAttestationCommands {
398 Show,
400 GetLaunchMeasurement,
402 VerifyLaunch {
404 #[arg(long = "host-platform", default_value = "gcp-tdx")]
406 host_platform: String,
407 },
408}
409
410#[derive(Debug, Subcommand)]
411pub enum SoftwareCommands {
412 Create {
414 #[arg(long = "paths", num_args = 1.., value_delimiter = ',')]
415 paths: Vec<PathBuf>,
416
417 #[arg(long = "ingredient-names", num_args = 1.., value_delimiter = ',')]
419 ingredient_names: Vec<String>,
420
421 #[arg(long = "name")]
423 name: String,
424
425 #[arg(long = "software-type")]
427 software_type: String,
428
429 #[arg(long = "version")]
431 version: Option<String>,
432
433 #[arg(long = "author-org")]
435 author_org: Option<String>,
436
437 #[arg(long = "author-name")]
439 author_name: Option<String>,
440
441 #[arg(long = "description")]
443 description: Option<String>,
444
445 #[arg(long = "linked-manifests")]
447 linked_manifests: Option<Vec<String>>,
448
449 #[arg(long = "key")]
451 key: Option<PathBuf>,
452
453 #[arg(long = "hash-alg", value_enum, default_value = "sha384")]
455 hash_alg: HashAlgorithmChoice,
456
457 #[arg(long = "print")]
459 print: bool,
460
461 #[arg(long = "encoding", default_value = "json")]
463 encoding: String,
464
465 #[arg(long = "storage-type", default_value = "database")]
467 storage_type: Box<String>,
468
469 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
471 storage_url: Box<String>,
472
473 #[arg(long = "with-tdx", default_value = "false")]
475 with_tdx: bool,
476 },
477 List {
479 #[arg(long = "storage-type", default_value = "database")]
481 storage_type: Box<String>,
482
483 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
485 storage_url: Box<String>,
486 },
487 Verify {
489 #[arg(long = "id")]
491 id: String,
492 #[arg(long = "storage-type", default_value = "database")]
494 storage_type: Box<String>,
495
496 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
498 storage_url: Box<String>,
499 },
500 LinkModel {
502 #[arg(long = "software-id")]
504 software_id: String,
505
506 #[arg(long = "model-id")]
508 model_id: String,
509
510 #[arg(long = "storage-type", default_value = "database")]
512 storage_type: Box<String>,
513
514 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
516 storage_url: Box<String>,
517 },
518 LinkDataset {
520 #[arg(long = "software-id")]
522 software_id: String,
523
524 #[arg(long = "dataset-id")]
526 dataset_id: String,
527
528 #[arg(long = "storage-type", default_value = "database")]
530 storage_type: Box<String>,
531
532 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
534 storage_url: Box<String>,
535 },
536}
537
538#[derive(Debug, Subcommand)]
539pub enum PipelineCommands {
540 GenerateProvenance {
542 #[arg(long = "inputs", num_args = 1.., value_delimiter = ',')]
544 inputs: Vec<PathBuf>,
545
546 #[arg(long = "pipeline")]
548 pipeline: PathBuf,
549
550 #[arg(long = "products", num_args = 1.., value_delimiter = ',')]
552 products: Vec<PathBuf>,
553
554 #[arg(long = "key")]
556 key: Option<PathBuf>,
557
558 #[arg(long = "hash-alg", value_enum, default_value = "sha384")]
560 hash_alg: HashAlgorithmChoice,
561
562 #[arg(long = "print")]
564 print: bool,
565
566 #[arg(long = "encoding", default_value = "json")]
568 encoding: String,
569
570 #[arg(long = "storage-type", default_value = "local-fs")]
572 storage_type: Box<String>,
573
574 #[arg(long = "storage-url", default_value = "http://localhost:8080")]
576 storage_url: Box<String>,
577
578 #[arg(long = "with-tdx", default_value = "false")]
580 with_tdx: bool,
581 },
582}