1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
use Args;
use crateInputParseError;
/// Parsed [Args] consisting of [Inputs] for execution flows, as well as an
/// optional function name/definition.
///
/// TODO: Extend via enumeration for singular objects/values.
///
/// [Inputs]: super::Input
/// Interface for [Instruction] implementations, relying on `homestore-core`
/// to implement custom parsing specifics.
///
/// # Example
///
/// ```
/// use homestar_invocation::{
/// task::{
/// instruction::{Ability, Args, Input, Parse},
/// Instruction,
/// },
/// Unit,
/// };
/// use libipld::Ipld;
/// use url::Url;
///
/// let wasm = "bafkreihxcyjgyrz437ewzi7md55uqt2zf6yr3zn7xrfi4orc34xdc5jgrm".to_string();
/// let resource = Url::parse(format!("ipfs://{wasm}").as_str()).unwrap();
///
/// let inst = Instruction::unique(
/// resource,
/// Ability::from("wasm/run"),
/// Input::<Unit>::Ipld(Ipld::List(vec![Ipld::Bool(true)]))
/// );
///
/// let parsed = inst.input().parse().unwrap();
///
/// // turn into Args for invocation:
/// let args: Args<Unit> = parsed.try_into().unwrap();
/// ```
///
/// [Instruction]: crate::task::Instruction