pub struct Comment {
pub id: Uuid,
pub author: String,
pub content: String,
pub created_at: DateTime<Utc>,
pub modified_at: DateTime<Utc>,
pub parent_id: Option<Uuid>,
pub replies: Vec<Comment>,
pub reactions: Vec<CommentReaction>,
}Expand description
Represents a comment on a requirement with threading support
Fields§
§id: UuidUnique identifier for the comment
Author of the comment
content: StringContent of the comment
created_at: DateTime<Utc>When the comment was created
modified_at: DateTime<Utc>When the comment was last modified
parent_id: Option<Uuid>Parent comment ID (None for top-level comments)
replies: Vec<Comment>Nested replies to this comment
reactions: Vec<CommentReaction>Reactions on this comment
Implementations§
Source§impl Comment
impl Comment
Sourcepub fn new_reply(author: String, content: String, parent_id: Uuid) -> Self
pub fn new_reply(author: String, content: String, parent_id: Uuid) -> Self
Creates a new reply to an existing comment
Sourcepub fn add_reaction(&mut self, reaction: &str, author: &str) -> bool
pub fn add_reaction(&mut self, reaction: &str, author: &str) -> bool
Adds a reaction to this comment Returns true if reaction was added, false if user already has this reaction
Sourcepub fn remove_reaction(&mut self, reaction: &str, author: &str) -> bool
pub fn remove_reaction(&mut self, reaction: &str, author: &str) -> bool
Removes a reaction from this comment Returns true if reaction was removed, false if not found
Sourcepub fn toggle_reaction(&mut self, reaction: &str, author: &str) -> bool
pub fn toggle_reaction(&mut self, reaction: &str, author: &str) -> bool
Toggles a reaction (adds if not present, removes if present) Returns true if reaction is now present, false if removed
Sourcepub fn reaction_counts(&self) -> HashMap<String, usize>
pub fn reaction_counts(&self) -> HashMap<String, usize>
Gets counts of each reaction type
Sourcepub fn has_reaction(&self, reaction: &str, author: &str) -> bool
pub fn has_reaction(&self, reaction: &str, author: &str) -> bool
Checks if a user has a specific reaction
Sourcepub fn find_comment_mut(&mut self, id: &Uuid) -> Option<&mut Comment>
pub fn find_comment_mut(&mut self, id: &Uuid) -> Option<&mut Comment>
Finds a comment by ID in this comment tree
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Comment
impl<'de> Deserialize<'de> for Comment
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl TS for Comment
impl TS for Comment
Source§type WithoutGenerics = Comment
type WithoutGenerics = Comment
WithoutGenerics should just be Self.
If the type does have generic parameters, then all generic parameters must be replaced with
a dummy type, e.g ts_rs::Dummy or ().
The only requirement for these dummy types is that EXPORT_TO must be None. Read moreSource§type OptionInnerType = Comment
type OptionInnerType = Comment
std::option::Option<T>, then this associated type is set to T.
All other implementations of TS should set this type to Self instead.Source§fn docs() -> Option<String>
fn docs() -> Option<String>
TS is derived, docs are
automatically read from your doc comments or #[doc = ".."] attributesSource§fn decl_concrete() -> String
fn decl_concrete() -> String
TS::decl().
If this type is not generic, then this function is equivalent to TS::decl().Source§fn decl() -> String
fn decl() -> String
type User = { user_id: number, ... }.
This function will panic if the type has no declaration. Read moreSource§fn inline() -> String
fn inline() -> String
{ user_id: number }.
This function will panic if the type cannot be inlined.Source§fn inline_flattened() -> String
fn inline_flattened() -> String
This function will panic if the type cannot be flattened.
Source§fn visit_generics(v: &mut impl TypeVisitor)where
Self: 'static,
fn visit_generics(v: &mut impl TypeVisitor)where
Self: 'static,
Source§fn output_path() -> Option<PathBuf>
fn output_path() -> Option<PathBuf>
T should be exported.The returned path does not include the base directory from
TS_RS_EXPORT_DIR. Read moreSource§fn visit_dependencies(v: &mut impl TypeVisitor)where
Self: 'static,
fn visit_dependencies(v: &mut impl TypeVisitor)where
Self: 'static,
Source§fn dependencies() -> Vec<Dependency>where
Self: 'static,
fn dependencies() -> Vec<Dependency>where
Self: 'static,
Source§fn export() -> Result<(), ExportError>where
Self: 'static,
fn export() -> Result<(), ExportError>where
Self: 'static,
TS::export_all. Read moreSource§fn export_all() -> Result<(), ExportError>where
Self: 'static,
fn export_all() -> Result<(), ExportError>where
Self: 'static,
To export only this type, without its dependencies, use
TS::export. Read moreSource§fn export_all_to(out_dir: impl AsRef<Path>) -> Result<(), ExportError>where
Self: 'static,
fn export_all_to(out_dir: impl AsRef<Path>) -> Result<(), ExportError>where
Self: 'static,
To export only this type, without its dependencies, use
TS::export. Read moreSource§fn export_to_string() -> Result<String, ExportError>where
Self: 'static,
fn export_to_string() -> Result<String, ExportError>where
Self: 'static,
impl Eq for Comment
impl StructuralPartialEq for Comment
Auto Trait Implementations§
impl Freeze for Comment
impl RefUnwindSafe for Comment
impl Send for Comment
impl Sync for Comment
impl Unpin for Comment
impl UnsafeUnpin for Comment
impl UnwindSafe for Comment
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.