/
imagemap.go
130 lines (113 loc) · 3.35 KB
/
imagemap.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// Copyright 2016 LINE Corporation
//
// LINE Corporation licenses this file to you under the Apache License,
// version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at:
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations
// under the License.
package linebot
import (
"encoding/json"
)
// ImagemapActionType type
type ImagemapActionType string
// ImagemapActionType constants
const (
ImagemapActionTypeURI ImagemapActionType = "uri"
ImagemapActionTypeMessage ImagemapActionType = "message"
)
// ImagemapBaseSize type
type ImagemapBaseSize struct {
Width int `json:"width"`
Height int `json:"height"`
}
// ImagemapArea type
type ImagemapArea struct {
X int `json:"x"`
Y int `json:"y"`
Width int `json:"width"`
Height int `json:"height"`
}
// ImagemapVideo type
type ImagemapVideo struct {
OriginalContentURL string `json:"originalContentUrl"`
PreviewImageURL string `json:"previewImageUrl"`
Area ImagemapArea `json:"area"`
ExternalLink *ImagemapVideoExternalLink `json:"externalLink,omitempty"`
}
// ImagemapVideoExternalLink type
type ImagemapVideoExternalLink struct {
LinkURI string `json:"linkUri"`
Label string `json:"label"`
}
// ImagemapAction type
type ImagemapAction interface {
json.Marshaler
ImagemapAction()
}
// URIImagemapAction type
type URIImagemapAction struct {
Label string
LinkURL string
Area ImagemapArea
}
// MarshalJSON method of URIImagemapAction
func (a *URIImagemapAction) MarshalJSON() ([]byte, error) {
return json.Marshal(&struct {
Type ImagemapActionType `json:"type"`
Label string `json:"label,omitempty"`
LinkURL string `json:"linkUri"`
Area ImagemapArea `json:"area"`
}{
Type: ImagemapActionTypeURI,
Label: a.Label,
LinkURL: a.LinkURL,
Area: a.Area,
})
}
// MessageImagemapAction type
type MessageImagemapAction struct {
Label string
Text string
Area ImagemapArea
}
// MarshalJSON method of MessageImagemapAction
func (a *MessageImagemapAction) MarshalJSON() ([]byte, error) {
return json.Marshal(&struct {
Type ImagemapActionType `json:"type"`
Label string `json:"label,omitempty"`
Text string `json:"text"`
Area ImagemapArea `json:"area"`
}{
Type: ImagemapActionTypeMessage,
Label: a.Label,
Text: a.Text,
Area: a.Area,
})
}
// ImagemapAction implements ImagemapAction interface
func (a *URIImagemapAction) ImagemapAction() {}
// ImagemapAction implements ImagemapAction interface
func (a *MessageImagemapAction) ImagemapAction() {}
// NewURIImagemapAction function
func NewURIImagemapAction(label, linkURL string, area ImagemapArea) *URIImagemapAction {
return &URIImagemapAction{
Label: label,
LinkURL: linkURL,
Area: area,
}
}
// NewMessageImagemapAction function
func NewMessageImagemapAction(label, text string, area ImagemapArea) *MessageImagemapAction {
return &MessageImagemapAction{
Label: label,
Text: text,
Area: area,
}
}