Implement FromStr.

This commit is contained in:
Bauke 2022-10-16 18:08:40 +02:00
parent cd560973ed
commit 2b944b57af
Signed by: Bauke
GPG Key ID: C1C0F29952BCF558
2 changed files with 30 additions and 2 deletions

View File

@ -1,6 +1,11 @@
//! Parsing for `/~<group>`. //! Parsing for `/~<group>`.
use {color_eyre::Result, scraper::Html}; use std::str::FromStr;
use {
color_eyre::{eyre::Error, Result},
scraper::Html,
};
use crate::{ use crate::{
regexes::GROUP_SUBSCRIBERS_RE, regexes::GROUP_SUBSCRIBERS_RE,
@ -42,6 +47,15 @@ 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> {

View File

@ -1,6 +1,11 @@
//! Parsing for [`/groups`](https://tildes.net/groups). //! Parsing for [`/groups`](https://tildes.net/groups).
use {color_eyre::Result, scraper::Html}; use std::str::FromStr;
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},
@ -32,6 +37,15 @@ 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> {