46 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			46 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|  | package main | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"sync" | ||
|  | 	"time" | ||
|  | ) | ||
|  | 
 | ||
|  | // Fruit represents a sweet, fresh fruit. | ||
|  | type Fruit struct { | ||
|  | 	Name    string    `json:"name" validate:"required" example:"banana"` | ||
|  | 	Origin  string    `json:"origin" validate:"required" description:"Country of origin of the fruit" enum:"ecuador,france,senegal,china,spain"` | ||
|  | 	Price   float64   `json:"price" validate:"required" description:"Price in euros" example:"5.13"` | ||
|  | 	AddedAt time.Time `json:"-" binding:"-" description:"Date of addition of the fruit to the market"` | ||
|  | } | ||
|  | 
 | ||
|  | // TypeName implements openapi.Typer interface for Fruit. | ||
|  | func (f *Fruit) TypeName() string { return "RottenFruit" } | ||
|  | 
 | ||
|  | // Market is a fruit market. | ||
|  | type Market struct { | ||
|  | 	fruits map[string]*Fruit | ||
|  | 	sync.RWMutex | ||
|  | } | ||
|  | 
 | ||
|  | var market *Market | ||
|  | 
 | ||
|  | func init() { | ||
|  | 	market = &Market{ | ||
|  | 		fruits:  make(map[string]*Fruit), | ||
|  | 		RWMutex: sync.RWMutex{}, | ||
|  | 	} | ||
|  | 	for _, f := range fruits { | ||
|  | 		market.fruits[f.Name] = f | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | var fruits = []*Fruit{ | ||
|  | 	{"banana", "ecuador", 2.99, time.Now()}, | ||
|  | 	{"apricot", "france", 4.50, time.Now()}, | ||
|  | 	{"mango", "senegal", 6.99, time.Now()}, | ||
|  | 	{"litchi", "china", 5.65, time.Now()}, | ||
|  | 	{"apple", "france", 2.49, time.Now()}, | ||
|  | 	{"peach", "spain", 3.20, time.Now()}, | ||
|  | 	{"peach", "spain", 3.20, time.Now()}, | ||
|  | } |