/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use std::path::PathBuf; use malloc_size_of::MallocSizeOfOps; use malloc_size_of_derive::MallocSizeOf; use serde::{Deserialize, Serialize}; #[derive(Clone, Debug, Default, Deserialize, MallocSizeOf, Serialize)] pub struct UserContentManager { user_scripts: Vec, } impl UserContentManager { pub fn new() -> Self { UserContentManager::default() } pub fn add_script(&mut self, script: impl Into) { self.user_scripts.push(script.into()); } pub fn scripts(&self) -> &[UserScript] { &self.user_scripts } } #[derive(Clone, Debug, Deserialize, Serialize)] pub struct UserScript { pub script: String, pub source_file: Option, } // Maybe we should implement `MallocSizeOf` for `PathBuf` in `malloc_size_of` crate? impl malloc_size_of::MallocSizeOf for UserScript { fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize { let mut sum = 0; sum += self.script.size_of(ops); if let Some(path) = &self.source_file { sum += unsafe { ops.malloc_size_of(path.as_path()) }; } sum } } impl> From for UserScript { fn from(script: T) -> Self { UserScript { script: script.into(), source_file: None, } } }