You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
yuurei/src/post.rs

71 lines
1.6 KiB

4 years ago
use super::*;
4 years ago
use cryptohelpers::sha256::Sha256Hash;
4 years ago
use hard_format::formats::{
PEMFormattedString,
PEMFormattedStr,
MaxLenString,
};
4 years ago
use tripcode::Tripcode;
4 years ago
id_type!(PostID; "A unique post ID");
/// Max length of `email` or `name` feild
const ID_MAX_LEN: usize = defaults::POST_ID_MAX_LEN;
/// String type that limits its bytes to the ID string max limit.
pub type IDMaxString = MaxLenString<ID_MAX_LEN>;
4 years ago
/// A single completed post
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
4 years ago
pub struct Post
{
4 years ago
id: PostID,
4 years ago
name: Option<IDMaxString>,
4 years ago
tripcode: Option<Tripcode>,
email: Option<IDMaxString>,
/// The client-side encrypted body string
4 years ago
body: PEMFormattedString,
/// Signature of the body (optional).
4 years ago
signature: Option<PEMFormattedString>,
/// Hash of the body
4 years ago
hash: Sha256Hash,
4 years ago
}
impl Post
{
/// The user-set name for this post if there is one.
#[inline] pub fn own_name(&self) -> Option<&str>
{
self.name.as_ref().map(|x| x.as_str())
}
/// The name for this post.
///
/// If no name is set, returns the default anon name.
pub fn name(&self) -> &str
{
self.own_name().unwrap_or(defaults::ANON_NAME)
}
/// The email set for this post, if there is one.
pub fn email(&self) -> Option<&str>
{
self.email.as_ref().map(|x| x.as_str())
}
/// Get the tripcode of this post, if there is one.
pub fn tripcode(&self) -> Option<&Tripcode>
{
self.tripcode.as_ref()
}
/// The body of this post
pub fn body(&self) -> &PEMFormattedStr
{
self.body.as_ref()
}
}