module main import freeflowuniverse.herolib.hero.models.marketplace.core // Generic product structure that can represent any marketplace item pub struct Product { core.Base pub mut: id string name string category_id string // References ProductCategory config description string base_price f64 // Using f64 for Decimal base_currency string attributes map[string]ProductAttribute // Generic attributes provider_id string provider_name string availability ProductAvailability metadata ProductMetadata // Extensible metadata created_at u64 // Unix timestamp updated_at u64 // Unix timestamp } // Configurable product categories pub struct ProductCategory { pub mut: id string name string display_name string description string attribute_schema []AttributeDefinition // Defines allowed attributes parent_category string is_active bool } // Generic attribute system for any product type pub struct ProductAttribute { pub mut: key string value string // Using string for serde_json::Value, consider map[string]string or specific types attribute_type AttributeType is_searchable bool is_filterable bool display_order u32 } pub enum AttributeType { text number slice_configuration boolean select // Select(Vec) multi_select // MultiSelect(Vec) range // Range { min: f64, max: f64 } custom } pub struct AttributeDefinition { pub mut: key string name string attribute_type AttributeType is_required bool is_searchable bool is_filterable bool validation_rules []ValidationRule } pub enum ValidationRule { min_length // MinLength(usize) max_length // MaxLength(usize) min_value // MinValue(f64) max_value // MaxValue(f64) pattern // Pattern(String) custom } pub enum ProductAvailability { available limited unavailable pre_order custom } pub struct ProductMetadata { pub mut: tags []string location string rating f32 review_count u32 featured bool custom_fields map[string]string // Using map[string]string for HashMap } // Support for different pricing models pub enum PricingModel { one_time recurring // Recurring { interval: String } usage_based // UsageBased { unit: String } tiered // Tiered(Vec) custom } pub struct PriceTier { pub mut: min_quantity u32 max_quantity u32 price_per_unit f64 // Using f64 for Decimal discount_percentage f32 } // Slice configuration data structure for product attributes pub struct SliceConfiguration { pub mut: cpu_cores int memory_gb int storage_gb int bandwidth_mbps int min_uptime_sla f32 public_ips int node_id string slice_type SliceType pricing SlicePricing } // Enhanced pricing structure for slices with multiple time periods pub struct SlicePricing { pub mut: hourly f64 // Using f64 for Decimal daily f64 // Using f64 for Decimal monthly f64 // Using f64 for Decimal yearly f64 // Using f64 for Decimal } pub enum SliceType { basic standard premium custom } // Placeholder for SliceAllocation and SliceCombination // These are not directly from product.rs but are referenced in user.rs pub struct SliceAllocation { pub mut: slice_id string node_id string user_id string allocated_cpu_cores int allocated_memory_gb int allocated_storage_gb int allocated_bandwidth_mbps int start_time u64 end_time u64 } pub struct SliceCombination { pub mut: cpu_cores int memory_gb int storage_gb int bandwidth_mbps int price_per_hour f64 } // Placeholder for DefaultSliceFormat // This is not directly from product.rs but is referenced in user.rs pub struct DefaultSliceFormat { pub mut: name string cpu_cores int memory_gb int storage_gb int bandwidth_mbps int price_per_hour f64 }