1#![allow(rustdoc::bare_urls)]
2#![doc = include_str!("../README.md")]
3
4use std;
5
6use aws_config::Region;
7
8mod templates;
9mod squire;
10mod aws;
11
12async fn generate_html(
24 config: &squire::settings::Config,
25 region: &Region,
26 metadata: &squire::constant::MetaData
27) -> String {
28 let jinja = templates::environment();
29 let template_string = format!("list-s3-{}", config.style);
30 let list_object = jinja.get_template(template_string.as_str()).unwrap();
31 let html_data = list_object.render(minijinja::context!(
32 bucket_name => config.bucket,
33 region_name => region.to_string(),
34 folder_names => config.filter,
35 ignore_objects => config.ignore,
36 proxy_server => config.proxy.to_string(),
37 cargo_version => metadata.pkg_version
38 ));
39 html_data.unwrap()
40}
41
42pub async fn initiate() {
44 let metadata = squire::constant::build_info();
45 let config = squire::parser::arguments(&metadata);
46
47 let region = aws::get_region(&config).await;
48 let aws_client = aws::get_client(®ion).await;
49
50 let mut bucket_names = Vec::new();
51 match aws::get_buckets(&aws_client).await {
52 Some(buckets) => {
53 for bucket in buckets {
54 bucket_names.push(bucket.name.unwrap());
55 }
56 }
57 None => {
58 eprintln!("Failed to fetch S3 buckets.");
59 std::process::exit(1)
60 }
61 }
62 if !bucket_names.contains(&config.bucket) {
63 eprintln!("\n{:?}\n\tBucket name is invalid.\n\tExpected one of {:?}\n",
64 &config.bucket, bucket_names);
65 std::process::exit(1)
66 }
67 let data = generate_html(&config, ®ion, &metadata).await;
68 aws::upload_object(&aws_client, &config.bucket, &data, &config.object).await;
69}