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
use cloudflare::endpoints::workerskv::WorkersKvNamespace; use cloudflare::framework::apiclient::ApiClient; use cloudflare::framework::response::ApiFailure; use crate::commands::kv; use crate::settings::global_user::GlobalUser; use crate::settings::target::Target; use crate::terminal::message; pub fn site( target: &Target, user: &GlobalUser, preview: bool, ) -> Result<WorkersKvNamespace, failure::Error> { kv::validate_target(target)?; let title = if preview { format!("__{}-{}", target.name, "workers_sites_assets_preview") } else { format!("__{}-{}", target.name, "workers_sites_assets") }; let client = kv::api_client(user)?; let response = kv::namespace::create::call_api(&client, target, &title); match response { Ok(success) => { let msg = format!("Created namespace for Workers Site \"{}\"", title); message::working(&msg); Ok(success.result) } Err(e) => match e { ApiFailure::Error(_status, api_errors) => { if api_errors.errors.iter().any(|e| e.code == 10026) { failure::bail!("You will need to enable Workers Unlimited for your account before you can use this feature.") } else if api_errors.errors.iter().any(|e| e.code == 10014) { log::info!("Namespace {} already exists.", title); let msg = format!("Using namespace for Workers Site \"{}\"", title); message::working(&msg); get_id_from_namespace_list(&client, target, &title) } else { failure::bail!("{:?}", api_errors.errors) } } ApiFailure::Invalid(reqwest_err) => failure::bail!("Error: {}", reqwest_err), }, } } fn get_id_from_namespace_list( client: &impl ApiClient, target: &Target, title: &str, ) -> Result<WorkersKvNamespace, failure::Error> { let result = kv::namespace::list::call_api(client, target); match result { Ok(success) => Ok(success .result .iter() .find(|ns| ns.title == title) .unwrap() .to_owned()), Err(e) => failure::bail!(kv::format_error(e)), } }