pub struct BookSource {Show 17 fields
pub schema: String,
pub name: String,
pub group: String,
pub url: String,
pub http: Http,
pub login_url: String,
pub login_ui: Vec<RowUi>,
pub login_check_js: String,
pub enabled_cookie_jar: bool,
pub concurrent_rate: String,
pub font_maps: BTreeMap<String, BTreeMap<String, String>>,
pub search: Option<SearchOp>,
pub explore: Option<ExploreOp>,
pub book_info: BookInfoOp,
pub toc: TocRules,
pub content: ContentRules,
pub samples: Vec<Sample>,
}Expand description
v2 书源。
Fields§
§schema: String固定为 "trnovel-booksource/v2"。
name: String§group: String§url: String站点基址,用于相对链接解析与 {{base}}。
http: Http§login_url: String登录:普通 URL,或登录脚本(@js:… / <js>…</js> 包裹,内含 login() 函数)。
非空即视为「需要登录」(见 BookSource::has_login);仅 js-host 构建可真正执行脚本登录。
login_ui: Vec<RowUi>声明式登录表单(TUI 渲染);收集值加密存为 loginInfo,供 login() 脚本读取。
login_check_js: String登录态过期校验脚本:每个网络方法响应后执行(注入 result=响应),判失效可提示重登。
开启后:响应的 Set-Cookie 自动回灌进 cookie 库(按注册域归并持久化)。
concurrent_rate: String限速:"N/ms"(N 次/ms)或纯毫秒间隔字符串;为空则用 http.rateLimit。
font_maps: BTreeMap<String, BTreeMap<String, String>>命名共享 fontMap 表(名字 -> {码点:真字}):供多个 clean 步骤按名复用,避免同一张
大表在书源里重复内联。clean 的 fontMap 写字符串名(如 {"fontMap":"search"})即引用本表,
在 BookSource::from_json 解析时就地展开为内联表(运行期与直接内联等价)。
search: Option<SearchOp>§explore: Option<ExploreOp>§book_info: BookInfoOp§toc: TocRules§content: ContentRules§samples: Vec<Sample>Implementations§
Source§impl BookSource
impl BookSource
Sourcepub fn from_json(s: &str) -> Result<Self, ConfigError>
pub fn from_json(s: &str) -> Result<Self, ConfigError>
从 JSON 字符串解析一个书源。
解析前先展开命名共享 fontMap:把所有 clean 步骤里 {"fontMap":"名字"} 的字符串引用,
就地替换为顶层 fontMaps[名字] 的内联表(通用 JSON 遍历,覆盖任意位置;未知名→留原字符串,
后续按 BTreeMap 反序列化会失败并给出清晰错误)。展开后与「直接内联」逐字节等价。
Sourcepub fn has_login(&self) -> bool
pub fn has_login(&self) -> bool
是否需要登录(loginUrl 或 loginUi 任一非空)。据此在 TUI 暴露「书源登录」入口。
注:仅配置 loginUi 而无登录脚本/loginUrl 属配置不完整,由登录页拦截并提示。
Sourcepub fn get_login_js(&self) -> Option<&str>
pub fn get_login_js(&self) -> Option<&str>
若 loginUrl 是登录脚本(@js: 或 <js>…</js> 包裹),剥壳返回脚本体;
否则(普通 URL 或空)返回 None——此时走 headful 浏览器登录。
Sourcepub fn from_value_many(value: Value) -> Result<Vec<Self>, ConfigError>
pub fn from_value_many(value: Value) -> Result<Vec<Self>, ConfigError>
从 JSON 值解析一个或多个书源(支持单对象或数组)。
与 BookSource::from_json 一致:逐源就地展开命名 fontMap 引用(数组里每个源各自的
fontMaps 注册表),否则 {"fontMap":"名"} 字符串引用会反序列化失败。
Trait Implementations§
Source§impl Clone for BookSource
impl Clone for BookSource
Source§fn clone(&self) -> BookSource
fn clone(&self) -> BookSource
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for BookSource
impl Debug for BookSource
Source§impl<'de> Deserialize<'de> for BookSource
impl<'de> Deserialize<'de> for BookSource
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for BookSource
Source§impl PartialEq for BookSource
impl PartialEq for BookSource
Source§fn eq(&self, other: &BookSource) -> bool
fn eq(&self, other: &BookSource) -> bool
self and other values to be equal, and is used by ==.Source§impl Serialize for BookSource
impl Serialize for BookSource
impl StructuralPartialEq for BookSource
Auto Trait Implementations§
impl Freeze for BookSource
impl RefUnwindSafe for BookSource
impl Send for BookSource
impl Sync for BookSource
impl Unpin for BookSource
impl UnsafeUnpin for BookSource
impl UnwindSafe for BookSource
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.