pub struct Skill {Show 13 fields
pub id: Uuid,
pub owner_id: Uuid,
pub building_id: Uuid,
pub skill_category: SkillCategory,
pub skill_name: String,
pub expertise_level: ExpertiseLevel,
pub description: String,
pub is_available_for_help: bool,
pub hourly_rate_credits: Option<i32>,
pub years_of_experience: Option<i32>,
pub certifications: Option<String>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}Expand description
Skill profile for community members
Represents a skill that a building resident can offer to help other members. Integrates with SEL (Local Exchange Trading System) for optional credit-based compensation.
§Business Rules
- skill_name must be 3-100 characters
- description max 1000 characters
- hourly_rate_credits: 0-100 (0 = free/volunteer, compatible with SEL system)
- years_of_experience: 0-50
- Only owner can update/delete their own skills
Fields§
§id: Uuid§owner_id: Uuid§building_id: Uuid§skill_category: SkillCategory§skill_name: String§expertise_level: ExpertiseLevel§description: String§is_available_for_help: bool§hourly_rate_credits: Option<i32>Hourly rate in SEL credits (0 = free/volunteer, None = not specified)
years_of_experience: Option<i32>Years of experience (optional)
certifications: Option<String>Professional certifications or qualifications (optional)
created_at: DateTime<Utc>§updated_at: DateTime<Utc>Implementations§
Source§impl Skill
impl Skill
Sourcepub fn new(
owner_id: Uuid,
building_id: Uuid,
skill_category: SkillCategory,
skill_name: String,
expertise_level: ExpertiseLevel,
description: String,
is_available_for_help: bool,
hourly_rate_credits: Option<i32>,
years_of_experience: Option<i32>,
certifications: Option<String>,
) -> Result<Self, String>
pub fn new( owner_id: Uuid, building_id: Uuid, skill_category: SkillCategory, skill_name: String, expertise_level: ExpertiseLevel, description: String, is_available_for_help: bool, hourly_rate_credits: Option<i32>, years_of_experience: Option<i32>, certifications: Option<String>, ) -> Result<Self, String>
Create a new skill
§Validation
- skill_name: 3-100 characters
- description: max 1000 characters
- hourly_rate_credits: 0-100 if provided
- years_of_experience: 0-50 if provided
Sourcepub fn update(
&mut self,
skill_name: Option<String>,
expertise_level: Option<ExpertiseLevel>,
description: Option<String>,
is_available_for_help: Option<bool>,
hourly_rate_credits: Option<Option<i32>>,
years_of_experience: Option<Option<i32>>,
certifications: Option<Option<String>>,
) -> Result<(), String>
pub fn update( &mut self, skill_name: Option<String>, expertise_level: Option<ExpertiseLevel>, description: Option<String>, is_available_for_help: Option<bool>, hourly_rate_credits: Option<Option<i32>>, years_of_experience: Option<Option<i32>>, certifications: Option<Option<String>>, ) -> Result<(), String>
Sourcepub fn mark_available(&mut self)
pub fn mark_available(&mut self)
Mark skill as available for help
Mark skill as unavailable for help
Sourcepub fn is_professional(&self) -> bool
pub fn is_professional(&self) -> bool
Check if skill is professional (has certifications or Expert level)
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Skill
impl<'de> Deserialize<'de> for Skill
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>,
Deserialize this value from the given Serde deserializer. Read more
Auto Trait Implementations§
impl Freeze for Skill
impl RefUnwindSafe for Skill
impl Send for Skill
impl Sync for Skill
impl Unpin for Skill
impl UnwindSafe for Skill
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
Mutably borrows from an owned value. Read more
§impl<T> Chain<T> for T
impl<T> Chain<T> for T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Fake for T
impl<T> Fake for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreCreates a shared type from an unshared type.