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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
use std::sync::Arc;

use url::Url;

use flowcore::model::lib_manifest::ImplementationLocator::Native;
use flowcore::model::lib_manifest::LibraryManifest;
use flowcore::model::metadata::MetaData;

use crate::{control, data, fmt, math};
use crate::errors::Result;

/// Return the LibraryManifest for this library
pub fn get_manifest() -> Result<LibraryManifest> {
    let metadata = MetaData {
        name: env!("CARGO_PKG_NAME").into(),
        version: env!("CARGO_PKG_VERSION").into(),
        description: env!("CARGO_PKG_DESCRIPTION").into(),
        authors: env!("CARGO_PKG_AUTHORS")
            .split(':')
            .map(|s| s.to_string())
            .collect(),
    };
    let lib_url = Url::parse(&format!("lib://{}", metadata.name))?;
    let mut manifest = LibraryManifest::new(lib_url, metadata);

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/data/zip")?,
            Native(Arc::new(data::zip::Zip)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/data/split")?,
            Native(Arc::new(data::split::Split)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/data/duplicate")?,
            Native(Arc::new(data::duplicate::Duplicate)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/data/duplicate_rows")?,
            Native(Arc::new(data::duplicate_rows::DuplicateRows)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/control/tap")?,
            Native(Arc::new(control::tap::Tap)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/data/append")?,
            Native(Arc::new(data::append::Append)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/data/count")?,
            Native(Arc::new(data::count::Count)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/control/select")?,
            Native(Arc::new(control::select::Select)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/control/compare_switch")?,
            Native(Arc::new(control::compare_switch::CompareSwitch)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/control/join")?,
            Native(Arc::new(control::join::Join)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/fmt/reverse")?,
            Native(Arc::new(fmt::reverse::Reverse)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/data/accumulate")?,
            Native(Arc::new(data::accumulate::Accumulate)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/control/route")?,
            Native(Arc::new(control::route::Route)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/fmt/to_json")?,
            Native(Arc::new(fmt::to_json::ToJson)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/data/ordered_split")?,
            Native(Arc::new(data::ordered_split::OrderedSplit)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/math/range_split")?,
            Native(Arc::new(math::range_split::RangeSplit)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/math/subtract")?,
            Native(Arc::new(math::subtract::Subtract)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/data/multiply_row")?,
            Native(Arc::new(data::multiply_row::MultiplyRow)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/math/compare")?,
            Native(Arc::new(math::compare::Compare)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/control/index")?,
            Native(Arc::new(control::index::Index)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/data/enumerate")?,
            Native(Arc::new(data::enumerate::Enumerate)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/math/divide")?,
            Native(Arc::new(math::divide::Divide)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/data/remove")?,
            Native(Arc::new(data::remove::Remove)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/fmt/to_string")?,
            Native(Arc::new(fmt::to_string::ToString)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/math/sqrt")?,
            Native(Arc::new(math::sqrt::Sqrt)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/data/info")?,
            Native(Arc::new(data::info::Info)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/math/add")?,
            Native(Arc::new(math::add::Add)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/math/multiply")?,
            Native(Arc::new(math::multiply::Multiply)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/data/sort")?,
            Native(Arc::new(data::sort::Sort)),
        );

    manifest.locators.insert(
            Url::parse("lib://flowstdlib/data/transpose")?,
            Native(Arc::new(data::transpose::Transpose)),
        );

    Ok(manifest)
}