Mercurial > gemma
view pkg/models/import.go @ 5675:b8da63027b48 sr-v2
Started to separate mesh serialisation in different files.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Sat, 10 Feb 2024 22:22:03 +0100 |
parents | 1222b777f51f |
children | 6270951dda28 |
line wrap: on
line source
// This is Free Software under GNU Affero General Public License v >= 3.0 // without warranty, see README.md and license for details. // // SPDX-License-Identifier: AGPL-3.0-or-later // License-Filename: LICENSES/AGPL-3.0.txt // // Copyright (C) 2018 by via donau // – Österreichische Wasserstraßen-Gesellschaft mbH // Software engineering by Intevation GmbH // // Author(s): // * Sascha L. Teichmann <sascha.teichmann@intevation.de> package models import ( "encoding/json" "errors" "time" "gemma.intevation.de/gemma/pkg/common" ) type ( // ImportTime is used as a time model. ImportTime struct{ time.Time } // Import is the on-wire representation of an import. Import struct { ID int64 `json:"id"` State string `json:"state"` Enqueued ImportTime `json:"enqueued"` Changed ImportTime `json:"changed"` Kind string `json:"kind"` User string `json:"user"` Signer string `json:"signer,omitempty"` Summary bool `json:"summary,omitempty"` Errors bool `json:"errors,omitempty"` Warnings bool `json:"warnings,omitempty"` } // ImportLogEntry is the on-wire representation of // a log entry. ImportLogEntry struct { Time ImportTime `json:"time"` Kind string `json:"kind"` Message string `json:"message"` } // ReviewState is the state of a review. ReviewState string // Review is the review state for a given ID. Review struct { ID int64 `json:"id"` State ReviewState `json:"state"` } ) var errInvalidReviewState = errors.New("state is wether 'accepted' nor 'declined'") // UnmarshalJSON implements the json.Unmarshal interface. func (rs *ReviewState) UnmarshalJSON(data []byte) error { var s string if err := json.Unmarshal(data, &s); err != nil { return err } if s != "accepted" && s != "declined" { return errInvalidReviewState } *rs = ReviewState(s) return nil } // MarshalJSON implements the json.Marshaler interface. func (it ImportTime) MarshalJSON() ([]byte, error) { return json.Marshal(it.Format(common.TimeFormatMicro)) } // Scan implements the sql.Scanner interface. func (it *ImportTime) Scan(x interface{}) error { t, ok := x.(time.Time) if !ok { *it = ImportTime{} } else { *it = ImportTime{t} } return nil }