Skip to content

Commit

Permalink
Merge pull request #700 from Stremio/feat/serialize-model-separatelly…
Browse files Browse the repository at this point in the history
…-from-creating-it

feat: serialize Model separatelly from creating it
  • Loading branch information
elpiel authored Oct 1, 2024
2 parents 71d8251 + a23ce69 commit 416b2f9
Show file tree
Hide file tree
Showing 22 changed files with 354 additions and 260 deletions.
12 changes: 0 additions & 12 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions src/types/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ pub mod streaming_server;
pub mod streams;
pub mod torrent;

// Re-export of stremio_watched_bitfield crate
pub mod watched_bitfield {
#[doc(inline)]
pub use stremio_watched_bitfield::*;
}

mod query_params_encode;
pub use query_params_encode::*;

Expand Down
6 changes: 5 additions & 1 deletion stremio-core-web/.cargo/config.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
[build]

rustdocflags = ["--cfg", "docsrs", "-Z", "unstable-options", "--enable-index-page"]

[alias]
# Requires cargo-watch
ww = ["watch-wasm"]
watch-wasm = ["watch", "--shell", "./scripts/build.sh --dev"]
watch-wasm = ["watch", "--shell", "./scripts/build.sh --dev"]

wasm-docs = "doc --target wasm32-unknown-unknown -F wasm"
49 changes: 32 additions & 17 deletions stremio-core-web/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,14 +1,22 @@
[package]
[package]
name = "stremio-core-web"
version = "0.47.8"
authors = ["Smart Code OOD"]
edition = "2021"

[lib]
crate-type = ["cdylib"]
crate-type = ["lib", "cdylib"]

[features]
default = []
default = ["std", "wasm"]

std = []
# enable wasm bindings exports, enabled by default (stremio-core-web crate after all)
wasm = ["env", "dep:wasm-bindgen", "dep:wasm-bindgen-futures", "dep:gloo-utils", "dep:tracing-wasm", "dep:console_error_panic_hook", "dep:js-sys", "dep:web-sys", "getrandom?/js"]
# Enable's the wasm Env. impl
# (this means that `wasm` feature is a superset of this one)
env = ["dep:http", "dep:regex", "dep:hex", "dep:getrandom", "dep:serde_path_to_error"]

# enable TRACE level of logging in the crate using `tracing`.
log-trace = []

Expand All @@ -18,42 +26,49 @@ stremio-core = { version = "0.1", features = ["derive", "analytics"], path = "..
serde = { version = "1.0.*", features = ["derive"] }
serde_json = "1.0.*"
futures = "0.3.*"
http = "0.2.*"

# used for Env impl
http = { version = "0.2", optional = true }
url = { version = "2.4.*", features = ["serde"] }

chrono = "0.4.*"
semver = { version = "1", features = ["serde"] }
regex = "1.8"
hex = "0.4.*"
# used for Env impl
regex = {version = "1.8", optional = true }
# used for Env impl
hex = { version = "0.4", optional = true }
either = "1.6.*"
enclose = "1.1.*"
itertools = "0.10.*"
boolinator = "2.4.*"
Inflector = "0.11.*"
wasm-bindgen = { version = "=0.2.78", features = ["serde-serialize"] }
wasm-bindgen-futures = "0.4"
gloo-utils = { version = "0.2", features = ["serde"] }

# WASM
wasm-bindgen = { version = "=0.2.78", features = ["serde-serialize"], optional = true }
wasm-bindgen-futures = { version = "0.4", optional = true }
gloo-utils = { version = "0.2", features = ["serde"], optional = true }

once_cell = "1"

# panic hook for wasm
console_error_panic_hook = "0.1.*"
console_error_panic_hook = { version = "0.1.*", optional = true }

js-sys = "0.3"
js-sys = { version = "0.3", optional = true }
web-sys = { version = "0.3", features = [
"WorkerGlobalScope",
"WorkerNavigator",
"Request",
"RequestInit",
"Response",
"console",
] }
getrandom = { version = "0.2.*", features = ["js"] }
cfg-if = "1.0"
serde_path_to_error = "0.1.*"
], optional = true }
# for env. impl
getrandom = { version = "0.2", optional = true }
# for env. impl
serde_path_to_error = { version = "0.1", optional = true }

# Tracing
tracing = "0.1"
tracing-wasm = "0.2"
tracing-wasm = { version = "0.2", optional = true }

[dev-dependencies]
wasm-bindgen-test = "0.3.0"
Expand Down
5 changes: 4 additions & 1 deletion stremio-core-web/src/env.rs
Original file line number Diff line number Diff line change
Expand Up @@ -456,7 +456,10 @@ impl Env for WebEnv {

#[cfg(debug_assertions)]
fn log(message: String) {
web_sys::console::log_1(&JsValue::from(message));
use tracing::info;

info!("{message}");
// web_sys::console::log_1();
}
}

Expand Down
67 changes: 65 additions & 2 deletions stremio-core-web/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,69 @@
#[allow(clippy::module_inception)]
pub mod model;
pub mod model {
#[cfg(feature = "wasm")]
pub use {
deep_links_ext::DeepLinksExt, model::*,
serialize_continue_watching_preview::serialize_continue_watching_preview,
serialize_ctx::serialize_ctx, serialize_data_export::serialize_data_export,
serialize_discover::serialize_discover,
serialize_installed_addons::serialize_installed_addons,
serialize_library::serialize_library, serialize_local_search::serialize_local_search,
serialize_meta_details::serialize_meta_details, serialize_player::serialize_player,
serialize_remote_addons::serialize_remote_addons,
serialize_streaming_server::serialize_streaming_server,
};

/// Trait which allows you to serialize one struct
/// on specific platform.
/// E.g.
/// - protobuf for kotlin
/// - JSON for wasm
/// - etc.
pub trait SerializeModel<Out> {
type Error;

fn serialize_model(&self) -> Result<Out, Self::Error>;
}

pub mod deep_links_ext {
pub trait DeepLinksExt {
fn into_web_deep_links(self) -> Self;
}

mod addons_deep_links;
mod discover_deep_links;
mod library_deep_links;
mod library_item_deep_links;
mod local_search_deep_links;
mod meta_item_deep_links;
mod search_history_deep_links;
mod stream_deep_links;
mod video_deep_links;
}

#[cfg(feature = "wasm")]
mod model;

pub mod serialize_catalogs_with_extra;
pub mod serialize_continue_watching_preview;
pub mod serialize_ctx;
pub mod serialize_data_export;
pub mod serialize_discover;
pub mod serialize_installed_addons;
pub mod serialize_library;
pub mod serialize_local_search;
pub mod serialize_meta_details;
pub mod serialize_player;
pub mod serialize_remote_addons;
pub mod serialize_streaming_server;
}

#[cfg(all(feature = "wasm", feature = "env"))]
pub mod env;
#[cfg(feature = "wasm")]
pub mod event;
pub mod stremio_core_web;
#[cfg(all(feature = "wasm", feature = "env"))]
mod stremio_core_web;
#[cfg(all(feature = "wasm", feature = "env"))]
// re-export all wasm-specific
pub use stremio_core_web::*;
3 changes: 0 additions & 3 deletions stremio-core-web/src/model/deep_links_ext/deep_links_ext.rs

This file was deleted.

12 changes: 0 additions & 12 deletions stremio-core-web/src/model/deep_links_ext/mod.rs

This file was deleted.

40 changes: 0 additions & 40 deletions stremio-core-web/src/model/mod.rs

This file was deleted.

47 changes: 30 additions & 17 deletions stremio-core-web/src/model/model.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
use gloo_utils::format::JsValueSerdeExt;
use wasm_bindgen::JsValue;

use super::*;

#[cfg(debug_assertions)]
use serde::Serialize;

use wasm_bindgen::JsValue;

use stremio_core::{
models::{
addon_details::AddonDetails,
Expand All @@ -29,15 +31,8 @@ use stremio_core::{
Model,
};

use crate::{
env::WebEnv,
model::{
serialize_catalogs_with_extra, serialize_continue_watching_preview, serialize_ctx,
serialize_data_export, serialize_discover, serialize_installed_addons, serialize_library,
serialize_local_search, serialize_meta_details, serialize_player, serialize_remote_addons,
serialize_streaming_server,
},
};
use super::SerializeModel;
use crate::env::WebEnv;

#[derive(Model, Clone)]
#[cfg_attr(debug_assertions, derive(Serialize))]
Expand Down Expand Up @@ -133,7 +128,15 @@ impl WebModel {
self.streaming_server.base_url.as_ref(),
&self.ctx.profile.settings,
),
WebModelField::Board => serialize_catalogs_with_extra(&self.board, &self.ctx),
WebModelField::Board => {
// let old = serialize_catalogs_with_extra(&self.board, &self.ctx);
crate::model::serialize_catalogs_with_extra::CatalogsWithExtra::new(
&self.board,
&self.ctx,
)
.serialize_model()
.expect("JsValue from model::CatalogsWithExtra")
}
WebModelField::Discover => {
serialize_discover(&self.discover, &self.ctx, &self.streaming_server)
}
Expand All @@ -149,11 +152,21 @@ impl WebModel {
self.streaming_server.base_url.as_ref(),
"continuewatching".to_owned(),
),
WebModelField::Search => serialize_catalogs_with_extra(&self.search, &self.ctx),
WebModelField::LocalSearch => serialize_local_search(&self.local_search),
WebModelField::MetaDetails => {
serialize_meta_details(&self.meta_details, &self.ctx, &self.streaming_server)
WebModelField::Search => {
// let old = serialize_catalogs_with_extra(&self.search, &self.ctx)
crate::model::serialize_catalogs_with_extra::CatalogsWithExtra::new(
&self.search,
&self.ctx,
)
.serialize_model()
.expect("JsValue from model::CatalogsWithExtra")
}
WebModelField::LocalSearch => serialize_local_search(&self.local_search),
WebModelField::MetaDetails => serialize_meta_details::<WebEnv>(
&self.meta_details,
&self.ctx,
&self.streaming_server,
),
WebModelField::RemoteAddons => serialize_remote_addons(&self.remote_addons, &self.ctx),
WebModelField::InstalledAddons => serialize_installed_addons(&self.installed_addons),
WebModelField::AddonDetails => {
Expand All @@ -162,7 +175,7 @@ impl WebModel {
}
WebModelField::StreamingServer => serialize_streaming_server(&self.streaming_server),
WebModelField::Player => {
serialize_player(&self.player, &self.ctx, &self.streaming_server)
serialize_player::<WebEnv>(&self.player, &self.ctx, &self.streaming_server)
}
}
}
Expand Down
Loading

0 comments on commit 416b2f9

Please sign in to comment.