Use duplicate crate to implement FromStr.
This commit is contained in:
parent
0f0b044993
commit
076c7c9029
|
@ -172,6 +172,16 @@ dependencies = [
|
||||||
"dtoa",
|
"dtoa",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "duplicate"
|
||||||
|
version = "0.4.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a0a4be4cd710e92098de6ad258e6e7c24af11c29c5142f3c6f2a545652480ff8"
|
||||||
|
dependencies = [
|
||||||
|
"heck",
|
||||||
|
"proc-macro-error",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ego-tree"
|
name = "ego-tree"
|
||||||
version = "0.6.2"
|
version = "0.6.2"
|
||||||
|
@ -250,6 +260,12 @@ version = "0.26.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d"
|
checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "heck"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "html5ever"
|
name = "html5ever"
|
||||||
version = "0.26.0"
|
version = "0.26.0"
|
||||||
|
@ -533,6 +549,30 @@ version = "0.1.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
|
checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro-error"
|
||||||
|
version = "1.0.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro-error-attr",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
"version_check",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro-error-attr"
|
||||||
|
version = "1.0.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"version_check",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro-hack"
|
name = "proc-macro-hack"
|
||||||
version = "0.5.19"
|
version = "0.5.19"
|
||||||
|
@ -854,6 +894,7 @@ name = "tildes-parser"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"color-eyre",
|
"color-eyre",
|
||||||
|
"duplicate",
|
||||||
"insta",
|
"insta",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"regex",
|
"regex",
|
||||||
|
@ -926,6 +967,12 @@ version = "0.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
|
checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "version_check"
|
||||||
|
version = "0.9.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasi"
|
name = "wasi"
|
||||||
version = "0.9.0+wasi-snapshot-preview1"
|
version = "0.9.0+wasi-snapshot-preview1"
|
||||||
|
|
|
@ -12,6 +12,7 @@ path = "source/lib.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
color-eyre = "^0.6.2"
|
color-eyre = "^0.6.2"
|
||||||
|
duplicate = "^0.4.1"
|
||||||
lazy_static = "^1.4.0"
|
lazy_static = "^1.4.0"
|
||||||
regex = "^1.6.0"
|
regex = "^1.6.0"
|
||||||
scraper = "^0.13.0"
|
scraper = "^0.13.0"
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
//! Implements [`FromStr`] for parser structs.
|
||||||
|
|
||||||
|
use std::str::FromStr;
|
||||||
|
|
||||||
|
use {color_eyre::eyre::Error, duplicate::duplicate_item, scraper::Html};
|
||||||
|
|
||||||
|
use crate::{Group, GroupList};
|
||||||
|
|
||||||
|
#[duplicate_item(
|
||||||
|
_Struct;
|
||||||
|
[Group];
|
||||||
|
[GroupList];
|
||||||
|
)]
|
||||||
|
impl FromStr for _Struct {
|
||||||
|
type Err = Error;
|
||||||
|
|
||||||
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
|
let html = Html::parse_document(s);
|
||||||
|
_Struct::from_html(&html)
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,11 +1,6 @@
|
||||||
//! Parsing for `/~<group>`.
|
//! Parsing for `/~<group>`.
|
||||||
|
|
||||||
use std::str::FromStr;
|
use {color_eyre::Result, scraper::Html};
|
||||||
|
|
||||||
use {
|
|
||||||
color_eyre::{eyre::Error, Result},
|
|
||||||
scraper::Html,
|
|
||||||
};
|
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
regexes::GROUP_SUBSCRIBERS_RE,
|
regexes::GROUP_SUBSCRIBERS_RE,
|
||||||
|
@ -47,15 +42,6 @@ pub struct GroupWikiLink {
|
||||||
pub url: String,
|
pub url: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FromStr for Group {
|
|
||||||
type Err = Error;
|
|
||||||
|
|
||||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
|
||||||
let html = Html::parse_document(s);
|
|
||||||
Self::from_html(&html)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Group {
|
impl Group {
|
||||||
/// Parses a [`Group`] from a [`scraper::Html`] tree.
|
/// Parses a [`Group`] from a [`scraper::Html`] tree.
|
||||||
pub fn from_html(html: &Html) -> Result<Self> {
|
pub fn from_html(html: &Html) -> Result<Self> {
|
||||||
|
|
|
@ -1,11 +1,6 @@
|
||||||
//! Parsing for [`/groups`](https://tildes.net/groups).
|
//! Parsing for [`/groups`](https://tildes.net/groups).
|
||||||
|
|
||||||
use std::str::FromStr;
|
use {color_eyre::Result, scraper::Html};
|
||||||
|
|
||||||
use {
|
|
||||||
color_eyre::{eyre::Error, Result},
|
|
||||||
scraper::Html,
|
|
||||||
};
|
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
regexes::{DUPLICATE_WHITESPACE_RE, GROUP_LIST_ACTIVITY_RE},
|
regexes::{DUPLICATE_WHITESPACE_RE, GROUP_LIST_ACTIVITY_RE},
|
||||||
|
@ -37,15 +32,6 @@ pub struct GroupListSummary {
|
||||||
pub topic_activity: Option<i32>,
|
pub topic_activity: Option<i32>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FromStr for GroupList {
|
|
||||||
type Err = Error;
|
|
||||||
|
|
||||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
|
||||||
let html = Html::parse_document(s);
|
|
||||||
Self::from_html(&html)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl GroupList {
|
impl GroupList {
|
||||||
/// Parses a [`GroupList`] from a [`scraper::Html`] tree.
|
/// Parses a [`GroupList`] from a [`scraper::Html`] tree.
|
||||||
pub fn from_html(html: &Html) -> Result<Self> {
|
pub fn from_html(html: &Html) -> Result<Self> {
|
||||||
|
|
|
@ -24,6 +24,7 @@ pub mod regexes;
|
||||||
pub mod selectors;
|
pub mod selectors;
|
||||||
pub mod utilities;
|
pub mod utilities;
|
||||||
|
|
||||||
|
pub(crate) mod from_str;
|
||||||
pub(crate) mod group;
|
pub(crate) mod group;
|
||||||
pub(crate) mod group_list;
|
pub(crate) mod group_list;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue