edgesearch 0.2.0

Serverless full-text search with Cloudflare Workers, WebAssembly, and Roaring Bitmaps
Documentation
use std::fs::File;
use std::io::Read;
use std::path::PathBuf;

use structopt::StructOpt;

use edgesearch::build::{build, BuildConfig, DocumentEncoding};
use edgesearch::deploy::{deploy, DeployConfig};

use crate::Cli::{Build, Deploy};

#[derive(StructOpt)]
enum Cli {
    Build {
        #[structopt(long, default_value = "text")] document_encoding: DocumentEncoding,
        #[structopt(long, parse(from_os_str))] document_terms: PathBuf,
        #[structopt(long, parse(from_os_str))] documents: PathBuf,
        #[structopt(long, default_value = "512")] maximum_query_bytes: usize,
        #[structopt(long)] maximum_query_results: usize,
        #[structopt(long, default_value = "50")] maximum_query_terms: usize,
        #[structopt(long, parse(from_os_str))] output_dir: PathBuf,
    },
    Deploy {
        #[structopt(long)] account_email: String,
        #[structopt(long)] account_id: String,
        #[structopt(long, parse(from_os_str))] default_results: PathBuf,
        #[structopt(long)] global_api_key: String,
        #[structopt(long)] name: String,
        #[structopt(long)] namespace: Option<String>,
        #[structopt(long, parse(from_os_str))] output_dir: PathBuf,
        #[structopt(long)] upload_data: bool,
    },
}

fn main() {
    let args = Cli::from_args();

    match args {
        Build {
            document_encoding,
            document_terms,
            documents,
            maximum_query_bytes,
            maximum_query_results,
            maximum_query_terms,
            output_dir,
        } => {
            build(BuildConfig {
                document_encoding,
                document_terms_source: File::open(document_terms).expect("open document terms file"),
                documents_source: File::open(documents).expect("open documents file"),
                maximum_query_bytes,
                maximum_query_results,
                maximum_query_terms,
                output_dir,
            });
        }
        Deploy {
            account_email,
            account_id,
            default_results: default_results_path,
            global_api_key,
            name,
            namespace,
            output_dir,
            upload_data,
        } => {
            let mut default_results = String::new();
            File::open(default_results_path).expect("open default results file").read_to_string(&mut default_results).expect("read default results file");
            deploy(DeployConfig {
                account_email,
                account_id,
                default_results,
                global_api_key,
                name,
                namespace,
                output_dir,
                upload_data,
            });
        }
    };
}