Skip to content
This repository has been archived by the owner on Aug 3, 2023. It is now read-only.

Commit

Permalink
cleanup: separate out service-worker form building logic
Browse files Browse the repository at this point in the history
move service_worker specific metadata to service_worker.rs
  • Loading branch information
xortive committed Feb 25, 2021
1 parent cdba3a4 commit c28e9fe
Show file tree
Hide file tree
Showing 5 changed files with 89 additions and 87 deletions.
9 changes: 0 additions & 9 deletions src/settings/metadata.rs

This file was deleted.

1 change: 0 additions & 1 deletion src/settings/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ pub mod binding;
mod environment;
mod global_config;
pub mod global_user;
pub mod metadata;
pub mod toml;

pub use environment::{Environment, QueryEnvironment};
Expand Down
84 changes: 9 additions & 75 deletions src/upload/form/mod.rs
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
mod plain_text;
mod project_assets;
mod service_worker;
mod text_blob;
mod wasm_module;

use reqwest::blocking::multipart::{Form, Part};
use reqwest::blocking::multipart::Form;
use std::fs;
use std::path::Path;
use std::path::PathBuf;

use crate::settings::binding;
use crate::settings::metadata::Metadata;
use crate::settings::toml::{Target, TargetType};
use crate::sites::AssetManifest;
use crate::wranglerjs;

use plain_text::PlainText;
use project_assets::ProjectAssets;
use project_assets::ServiceWorkerAssets;
use text_blob::TextBlob;
use wasm_module::WasmModule;

Expand Down Expand Up @@ -60,15 +60,15 @@ pub fn build(
wasm_modules.push(wasm_module);
let script_path = PathBuf::from("./worker/generated/script.js");

let assets = ProjectAssets::new(
let assets = ServiceWorkerAssets::new(
script_path,
wasm_modules,
kv_namespaces.to_vec(),
text_blobs,
plain_texts,
)?;

build_form(&assets, session_config)
service_worker::build_form(&assets, session_config)
}
TargetType::JavaScript => {
log::info!("JavaScript project detected. Publishing...");
Expand All @@ -77,15 +77,15 @@ pub fn build(

let script_path = package.main(&package_dir)?;

let assets = ProjectAssets::new(
let assets = ServiceWorkerAssets::new(
script_path,
wasm_modules,
kv_namespaces.to_vec(),
text_blobs,
plain_texts,
)?;

build_form(&assets, session_config)
service_worker::build_form(&assets, session_config)
}
TargetType::Webpack => {
log::info!("webpack project detected. Publishing...");
Expand All @@ -110,15 +110,15 @@ pub fn build(
text_blobs.push(text_blob);
}

let assets = ProjectAssets::new(
let assets = ServiceWorkerAssets::new(
script_path,
wasm_modules,
kv_namespaces.to_vec(),
text_blobs,
plain_texts,
)?;

build_form(&assets, session_config)
service_worker::build_form(&assets, session_config)
}
}
}
Expand All @@ -128,72 +128,6 @@ fn get_asset_manifest_blob(asset_manifest: AssetManifest) -> Result<String, fail
Ok(asset_manifest)
}

fn build_form(
assets: &ProjectAssets,
session_config: Option<serde_json::Value>,
) -> Result<Form, failure::Error> {
let mut form = Form::new();

// The preview service in particular streams the request form, and requires that the
// "metadata" part be set first, so this order is important.
form = add_metadata(form, assets)?;
form = add_files(form, assets)?;
if let Some(session_config) = session_config {
form = add_session_config(form, session_config)?
}

log::info!("building form");
log::info!("{:?}", &form);

Ok(form)
}

fn add_files(mut form: Form, assets: &ProjectAssets) -> Result<Form, failure::Error> {
form = form.file(assets.script_name(), assets.script_path())?;

for wasm_module in &assets.wasm_modules {
form = form.file(wasm_module.filename(), wasm_module.path())?;
}

for text_blob in &assets.text_blobs {
let part = Part::text(text_blob.data.clone())
.file_name(text_blob.binding.clone())
.mime_str("text/plain")?;

form = form.part(text_blob.binding.clone(), part);
}

Ok(form)
}

fn add_metadata(mut form: Form, assets: &ProjectAssets) -> Result<Form, failure::Error> {
let metadata_json = serde_json::json!(&Metadata {
body_part: assets.script_name(),
bindings: assets.bindings(),
});

let metadata = Part::text((metadata_json).to_string())
.file_name("metadata.json")
.mime_str("application/json")?;

form = form.part("metadata", metadata);

Ok(form)
}

fn add_session_config(
mut form: Form,
session_config: serde_json::Value,
) -> Result<Form, failure::Error> {
let wrangler_session_config = Part::text((session_config).to_string())
.file_name("")
.mime_str("application/json")?;

form = form.part("wrangler-session-config", wrangler_session_config);

Ok(form)
}

fn filename_from_path(path: &PathBuf) -> Option<String> {
path.file_stem()?.to_str().map(|s| s.to_string())
}
Expand Down
4 changes: 2 additions & 2 deletions src/upload/form/project_assets.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use super::wasm_module::WasmModule;
use crate::settings::toml::KvNamespace;

#[derive(Debug)]
pub struct ProjectAssets {
pub struct ServiceWorkerAssets {
script_name: String,
script_path: PathBuf,
pub wasm_modules: Vec<WasmModule>,
Expand All @@ -20,7 +20,7 @@ pub struct ProjectAssets {
pub plain_texts: Vec<PlainText>,
}

impl ProjectAssets {
impl ServiceWorkerAssets {
pub fn new(
script_path: PathBuf,
wasm_modules: Vec<WasmModule>,
Expand Down
78 changes: 78 additions & 0 deletions src/upload/form/service_worker.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
use reqwest::blocking::multipart::{Form, Part};
use serde::Serialize;

use crate::settings::binding::Binding;

use super::ServiceWorkerAssets;

#[derive(Serialize, Debug)]
struct Metadata {
pub body_part: String,
pub bindings: Vec<Binding>,
}

pub fn build_form(
assets: &ServiceWorkerAssets,
session_config: Option<serde_json::Value>,
) -> Result<Form, failure::Error> {
let mut form = Form::new();

// The preview service in particular streams the request form, and requires that the
// "metadata" part be set first, so this order is important.
form = add_metadata(form, assets)?;
form = add_files(form, assets)?;
if let Some(session_config) = session_config {
form = add_session_config(form, session_config)?
}

log::info!("building form");
log::info!("{:#?}", &form);

Ok(form)
}

fn add_files(mut form: Form, assets: &ServiceWorkerAssets) -> Result<Form, failure::Error> {
form = form.file(assets.script_name(), assets.script_path())?;

for wasm_module in &assets.wasm_modules {
form = form.file(wasm_module.filename(), wasm_module.path())?;
}

for text_blob in &assets.text_blobs {
let part = Part::text(text_blob.data.clone())
.file_name(text_blob.binding.clone())
.mime_str("text/plain")?;

form = form.part(text_blob.binding.clone(), part);
}

Ok(form)
}

fn add_metadata(mut form: Form, assets: &ServiceWorkerAssets) -> Result<Form, failure::Error> {
let metadata_json = serde_json::json!(&Metadata {
body_part: assets.script_name(),
bindings: assets.bindings(),
});

let metadata = Part::text(metadata_json.to_string())
.file_name("metadata.json")
.mime_str("application/json")?;

form = form.part("metadata", metadata);

Ok(form)
}

fn add_session_config(
mut form: Form,
session_config: serde_json::Value,
) -> Result<Form, failure::Error> {
let wrangler_session_config = Part::text(session_config.to_string())
.file_name("")
.mime_str("application/json")?;

form = form.part("wrangler-session-config", wrangler_session_config);

Ok(form)
}

0 comments on commit c28e9fe

Please sign in to comment.