package ocss import ( "encoding/json" "fmt" "time" ) type JourneyScheduleType int64 const ( Planned JourneyScheduleType = iota Dynamic Line ) func (t JourneyScheduleType) MarshalJSON() ([]byte, error) { types := map[JourneyScheduleType]string{ Planned: "\"PLANNED\"", Dynamic: "\"DYNAMIC\"", Line: "\"Line\"", } return []byte(types[t]), nil } type JSONTime time.Time func (t JSONTime) MarshalJSON() ([]byte, error) { //do your serializing here stamp := fmt.Sprintf("%v", time.Time(t).Unix()) return []byte(stamp), nil } func (t *JSONTime) UnmarshalJSON(b []byte) error { var timestamp int64 err := json.Unmarshal(b, ×tamp) if err != nil { return err } parsed := time.Unix(timestamp, 0) if err != nil { return err } jsontime := JSONTime(parsed) *t = jsontime return nil } type JourneySchedule struct { ID *string `json:"id,omitempty"` PassengerPickupDate JSONTime `json:"passengerPickupDate"` PassengerDepartureDate *JSONTime `json:"passengerDepartureDate,omitempty"` DriverDepartureDate *JSONTime `json:"driverDepartureDate,omitempty"` WebUrl *string `json:"webUrl,omitempty"` Type JourneyScheduleType `json:"type"` } type DriverJourney struct { DriverTrip JourneySchedule AvailableSteats *int `json:"requestedSeats,omitempty"` Price *Price `json:"price,omitempty"` } type PassengerJourney struct { PassengerTrip JourneySchedule //TODO how to handle requested driverDepartureDate RequestedSteats *int64 `json:"requestedSeats,omitempty"` }