1#![cfg_attr(
13 not(feature = "wrapped"),
14 doc = r##"
15```no_run
16# use anyhow::Result;
17# use arclutevests::{secrets, Config};
18# use serde::Deserialize;
19# use uuid::uuid;
20#
21#[derive(Clone, Debug, Deserialize)]
22struct TestData {
23 test_data: String,
24}
25#
26#[tokio::main]
27async fn main() -> Result<()> {
28# let uuid = uuid!("3628c169-fbe8-b5b8-b529-434f8d64fe38");
29# let config = Config::builder()
30# .vault_base_url("https://vault.allthetyme.info:8200/v1/")
31# .app_role("test")
32# .secrets_path("test/data/config")
33# .role_id(uuid)
34# .wrapping_token("")
35# .build();
36 let test_data: TestData = secrets(&config).await?;
37 assert_eq!(test_data.test_data, "this isn't really secret");
38# let uuid_bad = uuid!("3628c169-fbe8-b5b8-b529-434f8d64fe37");
39# let config_bad = Config::builder()
40# .vault_base_url("https://vault.allthetyme.info:8200/v1/")
41# .app_role("test")
42# .secrets_path("test/data/config")
43# .role_id(uuid)
44# .wrapping_token("")
45# .build();
46#
47 match secrets::<TestData>(&config_bad).await {
48 Ok(_) => assert!(false, "This shouldn't happen"),
49 Err(e) => assert!(format!("{e}").starts_with("uri: /v1/s/error/authfailed, title: Authentication Failed, status: 500, detail: Vault was unable to authenticate the client")),
50 }
51 Ok(())
52}
53```
54"##
55)]
56#![cfg_attr(
57 feature = "wrapped",
58 doc = r##"
59```
60# use anyhow::Result;
61# use arclutevests::{secrets, Config};
62# use serde::Deserialize;
63# use uuid::uuid;
64#
65#[derive(Clone, Debug, Deserialize)]
66struct TestData {
67 test_data: String,
68}
69#
70#[tokio::main]
71async fn main() -> Result<()> {
72# let uuid = uuid!("3628c169-fbe8-b5b8-b529-434f8d64fe38");
73# let config = Config::builder()
74# .vault_base_url("https://vault.allthetyme.info:8200/v1/")
75# .app_role("test")
76# .secrets_path("test/data/config")
77# .role_id(uuid)
78# .toad_base_url("https://toad.allthetyme.info:8443/")
79# .build();
80 let test_data: TestData = secrets(&config).await?;
81 assert_eq!(test_data.test_data, "this isn't really secret");
82# let uuid_bad = uuid!("3628c169-fbe8-b5b8-b529-434f8d64fe37");
83# let config_bad = Config::builder()
84# .vault_base_url("https://vault.allthetyme.info:8200/v1/")
85# .app_role("test")
86# .secrets_path("test/data/config")
87# .role_id(uuid_bad)
88# .toad_base_url("https://toad.allthetyme.info:8443/")
89# .build();
90#
91 match secrets::<TestData>(&config_bad).await {
92 Ok(_) => assert!(false, "This shouldn't happen"),
93 Err(e) => assert!(format!("{e}").starts_with("uri: /v1/s/error/authfailed, title: Authentication Failed, status: 500, detail: Vault was unable to authenticate the client")),
94 }
95 Ok(())
96}
97```
98"##
99)]
100#![deny(
102 absolute_paths_not_starting_with_crate,
103 anonymous_parameters,
104 array_into_iter,
105 asm_sub_register,
106 bad_asm_style,
107 bare_trait_objects,
108 bindings_with_variant_name,
109 box_pointers,
110 break_with_label_and_loop,
111 clashing_extern_declarations,
112 coherence_leak_check,
113 confusable_idents,
114 const_evaluatable_unchecked,
115 const_item_mutation,
116 dead_code,
117 deprecated,
118 deprecated_in_future,
119 deprecated_where_clause_location,
120 deref_into_dyn_supertrait,
121 deref_nullptr,
122 drop_bounds,
123 duplicate_macro_attributes,
124 dyn_drop,
125 elided_lifetimes_in_paths,
126 ellipsis_inclusive_range_patterns,
127 explicit_outlives_requirements,
128 exported_private_dependencies,
129 forbidden_lint_groups,
132 function_item_references,
133 illegal_floating_point_literal_pattern,
136 improper_ctypes,
137 improper_ctypes_definitions,
138 incomplete_features,
139 indirect_structural_match,
140 inline_no_sanitize,
141 invalid_doc_attributes,
142 invalid_value,
143 irrefutable_let_patterns,
144 keyword_idents,
145 large_assignments,
146 late_bound_lifetime_arguments,
147 legacy_derive_helpers,
148 let_underscore_drop,
149 macro_use_extern_crate,
152 meta_variable_misuse,
153 missing_abi,
154 missing_copy_implementations,
155 missing_debug_implementations,
156 missing_docs,
157 mixed_script_confusables,
158 named_arguments_used_positionally,
161 no_mangle_generic_items,
162 non_ascii_idents,
163 non_camel_case_types,
164 non_fmt_panics,
167 non_shorthand_field_patterns,
168 non_snake_case,
169 non_upper_case_globals,
170 nontrivial_structural_match,
171 noop_method_call,
172 overlapping_range_endpoints,
173 path_statements,
174 pointer_structural_match,
175 private_in_public,
176 redundant_semicolons,
177 renamed_and_removed_lints,
178 repr_transparent_external_private_fields,
179 rust_2021_incompatible_closure_captures,
180 rust_2021_incompatible_or_patterns,
181 rust_2021_prefixes_incompatible_syntax,
182 rust_2021_prelude_collisions,
183 semicolon_in_expressions_from_macros,
184 single_use_lifetimes,
185 special_module_name,
186 stable_features,
187 suspicious_auto_trait_impls,
188 temporary_cstring_as_ptr,
189 trivial_bounds,
190 trivial_casts,
191 trivial_numeric_casts,
192 type_alias_bounds,
193 tyvar_behind_raw_pointer,
194 uncommon_codepoints,
195 unconditional_recursion,
196 unexpected_cfgs,
197 uninhabited_static,
200 unknown_lints,
201 unnameable_test_items,
202 unreachable_code,
203 unreachable_patterns,
204 unreachable_pub,
205 unsafe_code,
206 unsafe_op_in_unsafe_fn,
207 unstable_features,
208 unstable_name_collisions,
209 unstable_syntax_pre_expansion,
210 unsupported_calling_conventions,
211 unused_allocation,
212 unused_assignments,
213 unused_attributes,
214 unused_braces,
215 unused_comparisons,
216 unused_crate_dependencies,
217 unused_doc_comments,
218 unused_extern_crates,
219 unused_features,
220 unused_import_braces,
221 unused_imports,
222 unused_labels,
223 unused_lifetimes,
224 unused_macro_rules,
225 unused_macros,
226 unused_must_use,
227 unused_mut,
228 unused_parens,
229 unused_qualifications,
230 unused_results,
231 unused_tuple_struct_fields,
232 unused_unsafe,
233 unused_variables,
234 variant_size_differences,
235 where_clauses_object_safety,
236 while_true
237)]
238#![cfg_attr(
242 any(beta_lints, nightly_lints),
243 deny(for_loops_over_fallibles, opaque_hidden_inferred_bound,)
244)]
245#![deny(clippy::all, clippy::pedantic)]
253#![deny(
255 rustdoc::bare_urls,
256 rustdoc::broken_intra_doc_links,
257 rustdoc::invalid_codeblock_attributes,
258 rustdoc::invalid_html_tags,
259 rustdoc::missing_crate_level_docs,
260 rustdoc::private_doc_tests,
263 rustdoc::private_intra_doc_links
264)]
265
266mod constants;
267mod error;
268mod model;
269mod secrets;
270mod util;
271
272use tokio as _;
274
275pub use error::Error;
276pub use model::config::Config;
277pub use secrets::secrets;