package airport import ( "fmt" ) type Aircraft struct { Flight Flight Passengers []Passenger Baggage []Baggage } var _ BaggageProcessor = &Aircraft{} func NewAircraft(flight Flight) Aircraft { return Aircraft{flight, []Passenger{}, []Baggage{}} } func (ac *Aircraft) ProcessBaggage(fn FlightNumber, b Baggage) error { if fn != ac.Flight.Id { return fmt.Errorf("wrong flight %s", fn) } ac.Baggage = append(ac.Baggage, b) fmt.Printf("loaded baggage %v onto flight %v\n", b, fn) return nil } func (ac *Aircraft) Process(p Passenger) error { if p.BoardingPass.FlightNumber != ac.Flight.Id { return fmt.Errorf("%s is unauthorized to enter aircraft", p.Name) } ac.Passengers = append(ac.Passengers, p) return nil } func (ac *Aircraft) Start(gate *Gate, rwy *Runway) { gate.ProcessAircraft(ac) rwy.ProcessAircraft(*ac) }