mirror of
https://github.com/edg-l/sitewriter.git
synced 2024-09-19 17:14:24 +00:00
use str instead of owned string
This commit is contained in:
parent
e53654d64e
commit
4723a4c86c
|
@ -5,31 +5,31 @@ fn main() {
|
||||||
let mut sitemap = Sitemap::new();
|
let mut sitemap = Sitemap::new();
|
||||||
sitemap
|
sitemap
|
||||||
.urls
|
.urls
|
||||||
.push(Url::new("https://edgarluque.com/projects".to_owned()));
|
.push(Url::new("https://edgarluque.com/projects"));
|
||||||
|
|
||||||
sitemap.urls.push(Url {
|
sitemap.urls.push(Url {
|
||||||
loc: "https://edgarluque.com/".to_owned(),
|
loc: "https://edgarluque.com/",
|
||||||
changefreq: Some(ChangeFreq::Daily),
|
changefreq: Some(ChangeFreq::Daily),
|
||||||
priority: Some(1.0),
|
priority: Some(1.0),
|
||||||
lastmod: Some(Utc::now()),
|
lastmod: Some(Utc::now()),
|
||||||
});
|
});
|
||||||
|
|
||||||
sitemap.urls.push(Url {
|
sitemap.urls.push(Url {
|
||||||
loc: "https://edgarluque.com/blog".to_owned(),
|
loc: "https://edgarluque.com/blog",
|
||||||
changefreq: Some(ChangeFreq::Weekly),
|
changefreq: Some(ChangeFreq::Weekly),
|
||||||
priority: Some(0.8),
|
priority: Some(0.8),
|
||||||
lastmod: Some(Utc::now()),
|
lastmod: Some(Utc::now()),
|
||||||
});
|
});
|
||||||
|
|
||||||
sitemap.urls.push(Url {
|
sitemap.urls.push(Url {
|
||||||
loc: "https://edgarluque.com/blog/sitewriter".to_owned(),
|
loc: "https://edgarluque.com/blog/sitewriter",
|
||||||
changefreq: Some(ChangeFreq::Never),
|
changefreq: Some(ChangeFreq::Never),
|
||||||
priority: Some(0.5),
|
priority: Some(0.5),
|
||||||
lastmod: Some(Utc.ymd(2020, 11, 22).and_hms(15, 10, 15)),
|
lastmod: Some(Utc.ymd(2020, 11, 22).and_hms(15, 10, 15)),
|
||||||
});
|
});
|
||||||
|
|
||||||
sitemap.urls.push(Url {
|
sitemap.urls.push(Url {
|
||||||
loc: "https://edgarluque.com/blog/some-future-post".to_owned(),
|
loc: "https://edgarluque.com/blog/some-future-post",
|
||||||
changefreq: Some(ChangeFreq::Never),
|
changefreq: Some(ChangeFreq::Never),
|
||||||
priority: Some(0.5),
|
priority: Some(0.5),
|
||||||
lastmod: Some(
|
lastmod: Some(
|
||||||
|
|
87
src/lib.rs
87
src/lib.rs
|
@ -1,51 +1,47 @@
|
||||||
//! ## A rust library to generate sitemaps.
|
//! ## A library to generate sitemaps.
|
||||||
//!
|
//!
|
||||||
//! It uses the [quick-xml](https://github.com/tafia/quick-xml) so it should be fast.
|
//! It uses the [quick-xml](https://github.com/tafia/quick-xml) so it should be fast.
|
||||||
//!
|
//!
|
||||||
//! To handle the [`Url::lastmod`] tag it uses [chrono](https://docs.rs/chrono/) but it can be disabled with `default-features = false`.
|
|
||||||
//!
|
|
||||||
//! ## Example
|
//! ## Example
|
||||||
//!
|
//!
|
||||||
//! ```rust
|
//! ```rust
|
||||||
//! use chrono::prelude::*;
|
//! use chrono::prelude::*;
|
||||||
//! use sitewriter::*;
|
//! use sitewriter::*;
|
||||||
//!
|
//!
|
||||||
//! fn main() {
|
//! let mut sitemap = Sitemap::new();
|
||||||
//! let mut sitemap = Sitemap::new();
|
//! sitemap.urls.push(Url::new("https://edgarluque.com/projects"));
|
||||||
//! sitemap.urls.push(Url::new("https://edgarluque.com/projects".to_owned()));
|
|
||||||
//!
|
//!
|
||||||
//! sitemap.urls.push(Url {
|
//! sitemap.urls.push(Url {
|
||||||
//! loc: "https://edgarluque.com/".to_owned(),
|
//! loc: "https://edgarluque.com/",
|
||||||
//! changefreq: Some(ChangeFreq::Daily),
|
//! changefreq: Some(ChangeFreq::Daily),
|
||||||
//! priority: Some(1.0),
|
//! priority: Some(1.0),
|
||||||
//! lastmod: Some(Utc::now()),
|
//! lastmod: Some(Utc::now()),
|
||||||
//! });
|
//! });
|
||||||
//!
|
//!
|
||||||
//! sitemap.urls.push(Url {
|
//! sitemap.urls.push(Url {
|
||||||
//! loc: "https://edgarluque.com/blog".to_owned(),
|
//! loc: "https://edgarluque.com/blog",
|
||||||
//! changefreq: Some(ChangeFreq::Weekly),
|
//! changefreq: Some(ChangeFreq::Weekly),
|
||||||
//! priority: Some(0.8),
|
//! priority: Some(0.8),
|
||||||
//! lastmod: Some(Utc::now()),
|
//! lastmod: Some(Utc::now()),
|
||||||
//! });
|
//! });
|
||||||
//!
|
//!
|
||||||
//! sitemap.urls.push(Url {
|
//! sitemap.urls.push(Url {
|
||||||
//! loc: "https://edgarluque.com/blog/sitewriter".to_owned(),
|
//! loc: "https://edgarluque.com/blog/sitewriter",
|
||||||
//! changefreq: Some(ChangeFreq::Never),
|
//! changefreq: Some(ChangeFreq::Never),
|
||||||
//! priority: Some(0.5),
|
//! priority: Some(0.5),
|
||||||
//! lastmod: Some(Utc.ymd(2020, 11, 22).and_hms(15, 10, 15)),
|
//! lastmod: Some(Utc.ymd(2020, 11, 22).and_hms(15, 10, 15)),
|
||||||
//! });
|
//! });
|
||||||
//!
|
//!
|
||||||
//! sitemap.urls.push(Url {
|
//! sitemap.urls.push(Url {
|
||||||
//! loc: "https://edgarluque.com/blog/some-future-post".to_owned(),
|
//! loc: "https://edgarluque.com/blog/some-future-post",
|
||||||
//! changefreq: Some(ChangeFreq::Never),
|
//! changefreq: Some(ChangeFreq::Never),
|
||||||
//! priority: Some(0.5),
|
//! priority: Some(0.5),
|
||||||
//! lastmod: Some(Utc.from_utc_datetime(&Local.ymd(2020, 12, 5).and_hms(12, 30, 0).naive_utc())),
|
//! lastmod: Some(Utc.from_utc_datetime(&Local.ymd(2020, 12, 5).and_hms(12, 30, 0).naive_utc())),
|
||||||
//! });
|
//! });
|
||||||
//!
|
//!
|
||||||
//!
|
//!
|
||||||
//! let result = sitemap.into_str();
|
//! let result = sitemap.into_str();
|
||||||
//! println!("{}", result);
|
//! println!("{}", result);
|
||||||
//! }
|
|
||||||
//! ```
|
//! ```
|
||||||
|
|
||||||
use chrono::{DateTime, SecondsFormat, Utc};
|
use chrono::{DateTime, SecondsFormat, Utc};
|
||||||
|
@ -94,11 +90,11 @@ impl Display for ChangeFreq {
|
||||||
|
|
||||||
/// A sitemap url entry.
|
/// A sitemap url entry.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Url {
|
pub struct Url<'a> {
|
||||||
/// URL of the page.
|
/// URL of the page.
|
||||||
///
|
///
|
||||||
/// This URL must begin with the protocol (such as http) and end with a trailing slash, if your web server requires it. This value must be less than 2,048 characters.
|
/// This URL must begin with the protocol (such as http) and end with a trailing slash, if your web server requires it. This value must be less than 2,048 characters.
|
||||||
pub loc: String,
|
pub loc: &'a str,
|
||||||
/// The date of last modification of the file.
|
/// The date of last modification of the file.
|
||||||
pub lastmod: Option<DateTime<Utc>>,
|
pub lastmod: Option<DateTime<Utc>>,
|
||||||
/// How frequently the page is likely to change.
|
/// How frequently the page is likely to change.
|
||||||
|
@ -109,9 +105,9 @@ pub struct Url {
|
||||||
pub priority: Option<f32>,
|
pub priority: Option<f32>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Url {
|
impl<'a> Url<'a> {
|
||||||
/// Creates a url (sitemap entry) with only the required elements.
|
/// Creates a url (sitemap entry) with only the required elements.
|
||||||
pub fn new(loc: String) -> Self {
|
pub fn new(loc: &'a str) -> Self {
|
||||||
Self {
|
Self {
|
||||||
loc,
|
loc,
|
||||||
lastmod: None,
|
lastmod: None,
|
||||||
|
@ -123,9 +119,9 @@ impl Url {
|
||||||
|
|
||||||
/// Struct to hold the sitemap information.
|
/// Struct to hold the sitemap information.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Sitemap {
|
pub struct Sitemap<'a> {
|
||||||
/// The list of url entries.
|
/// The list of url entries.
|
||||||
pub urls: Vec<Url>,
|
pub urls: Vec<Url<'a>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_tag<T: std::io::Write>(writer: &mut Writer<T>, tag: &str, text: &str) {
|
fn write_tag<T: std::io::Write>(writer: &mut Writer<T>, tag: &str, text: &str) {
|
||||||
|
@ -140,7 +136,7 @@ fn write_tag<T: std::io::Write>(writer: &mut Writer<T>, tag: &str, text: &str) {
|
||||||
.expect(&format!("error opening {}", tag));
|
.expect(&format!("error opening {}", tag));
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Sitemap {
|
impl<'a> Sitemap<'a> {
|
||||||
/// Create a new sitemap.
|
/// Create a new sitemap.
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
Self { urls: Vec::new() }
|
Self { urls: Vec::new() }
|
||||||
|
@ -216,32 +212,29 @@ impl Sitemap {
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::*;
|
use crate::*;
|
||||||
|
|
||||||
#[cfg(feature = "chrono")]
|
|
||||||
#[test]
|
#[test]
|
||||||
fn it_works() {
|
fn it_works() {
|
||||||
use chrono::Utc;
|
use chrono::Utc;
|
||||||
|
|
||||||
let mut sitemap = Sitemap::new();
|
let mut sitemap = Sitemap::new();
|
||||||
sitemap
|
sitemap.urls.push(Url::new("https://domain.com/"));
|
||||||
.urls
|
|
||||||
.push(Url::new("https://domain.com/".to_owned()));
|
|
||||||
|
|
||||||
sitemap.urls.push(Url {
|
sitemap.urls.push(Url {
|
||||||
loc: "https://domain.com/url".to_owned(),
|
loc: "https://domain.com/url",
|
||||||
changefreq: Some(ChangeFreq::Daily),
|
changefreq: Some(ChangeFreq::Daily),
|
||||||
priority: Some(0.8),
|
priority: Some(0.8),
|
||||||
lastmod: Some(Utc::now()),
|
lastmod: Some(Utc::now()),
|
||||||
});
|
});
|
||||||
|
|
||||||
sitemap.urls.push(Url {
|
sitemap.urls.push(Url {
|
||||||
loc: "https://domain.com/aa".to_owned(),
|
loc: "https://domain.com/aa",
|
||||||
changefreq: Some(ChangeFreq::Monthly),
|
changefreq: Some(ChangeFreq::Monthly),
|
||||||
priority: None,
|
priority: None,
|
||||||
lastmod: None,
|
lastmod: None,
|
||||||
});
|
});
|
||||||
|
|
||||||
sitemap.urls.push(Url {
|
sitemap.urls.push(Url {
|
||||||
loc: "https://domain.com/bb".to_owned(),
|
loc: "https://domain.com/bb",
|
||||||
changefreq: None,
|
changefreq: None,
|
||||||
priority: None,
|
priority: None,
|
||||||
lastmod: None,
|
lastmod: None,
|
||||||
|
|
Loading…
Reference in a new issue