parent
3a2e30486a
commit
4e0f6945bf
@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
/// Default anonymous name
|
||||||
|
pub const ANON_NAME: &'static str = "名無し";
|
||||||
|
/// Max length of `name` and `email` feilds in posts.
|
||||||
|
pub const POST_ID_MAX_LEN: usize = 32;
|
@ -1,24 +1,70 @@
|
|||||||
use super::*;
|
use super::*;
|
||||||
use cryptohelpers::sha256::Sha256Hash;
|
use cryptohelpers::sha256::Sha256Hash;
|
||||||
|
|
||||||
use hard_format::formats::PEMFormattedString;
|
use hard_format::formats::{
|
||||||
|
PEMFormattedString,
|
||||||
|
PEMFormattedStr,
|
||||||
|
MaxLenString,
|
||||||
|
};
|
||||||
use tripcode::Tripcode;
|
use tripcode::Tripcode;
|
||||||
|
|
||||||
id_type!(PostID; "A unique post ID");
|
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>;
|
||||||
|
|
||||||
/// A single completed post
|
/// A single completed post
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
pub struct Post
|
pub struct Post
|
||||||
{
|
{
|
||||||
id: PostID,
|
id: PostID,
|
||||||
|
|
||||||
name: Option<String>,
|
name: Option<IDMaxString>,
|
||||||
tripcode: Option<Tripcode>,
|
tripcode: Option<Tripcode>,
|
||||||
email: Option<String>,
|
email: Option<IDMaxString>,
|
||||||
|
|
||||||
|
/// The client-side encrypted body string
|
||||||
body: PEMFormattedString,
|
body: PEMFormattedString,
|
||||||
|
/// Signature of the body (optional).
|
||||||
signature: Option<PEMFormattedString>,
|
signature: Option<PEMFormattedString>,
|
||||||
|
|
||||||
/// Hash of the body
|
/// Hash of the body
|
||||||
hash: Sha256Hash,
|
hash: Sha256Hash,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in new issue