...
1
2
3
4
5
6
7
8 package freightv1
9
10 import (
11 fmt "fmt"
12 resourcename "go.einride.tech/aip/resourcename"
13 strings "strings"
14 )
15
16 type SiteResourceName struct {
17 Shipper string
18 Site string
19 }
20
21 func (n ShipperResourceName) SiteResourceName(
22 site string,
23 ) SiteResourceName {
24 return SiteResourceName{
25 Shipper: n.Shipper,
26 Site: site,
27 }
28 }
29
30 func (n SiteResourceName) Validate() error {
31 if n.Shipper == "" {
32 return fmt.Errorf("shipper: empty")
33 }
34 if strings.IndexByte(n.Shipper, '/') != -1 {
35 return fmt.Errorf("shipper: contains illegal character '/'")
36 }
37 if n.Site == "" {
38 return fmt.Errorf("site: empty")
39 }
40 if strings.IndexByte(n.Site, '/') != -1 {
41 return fmt.Errorf("site: contains illegal character '/'")
42 }
43 return nil
44 }
45
46 func (n SiteResourceName) ContainsWildcard() bool {
47 return false || n.Shipper == "-" || n.Site == "-"
48 }
49
50 func (n SiteResourceName) String() string {
51 return resourcename.Sprint(
52 "shippers/{shipper}/sites/{site}",
53 n.Shipper,
54 n.Site,
55 )
56 }
57
58 func (n SiteResourceName) MarshalString() (string, error) {
59 if err := n.Validate(); err != nil {
60 return "", err
61 }
62 return n.String(), nil
63 }
64
65 func (n *SiteResourceName) UnmarshalString(name string) error {
66 err := resourcename.Sscan(
67 name,
68 "shippers/{shipper}/sites/{site}",
69 &n.Shipper,
70 &n.Site,
71 )
72 if err != nil {
73 return err
74 }
75 return n.Validate()
76 }
77
78 func (n SiteResourceName) ShipperResourceName() ShipperResourceName {
79 return ShipperResourceName{
80 Shipper: n.Shipper,
81 }
82 }
83
View as plain text