github.com/line/line-bot-sdk-go/v7@v7.21.0/linebot/demographic_filter.go (about) 1 // Copyright 2020 LINE Corporation 2 // 3 // LINE Corporation licenses this file to you under the Apache License, 4 // version 2.0 (the "License"); you may not use this file except in compliance 5 // with the License. You may obtain a copy of the License at: 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12 // License for the specific language governing permissions and limitations 13 // under the License. 14 15 package linebot 16 17 import "encoding/json" 18 19 // DemographicFilter interface 20 type DemographicFilter interface { 21 DemographicFilter() 22 } 23 24 // GenderType type 25 type GenderType string 26 27 // GenderType constants 28 const ( 29 GenderMale GenderType = "male" 30 GenderFemale GenderType = "female" 31 ) 32 33 // GenderFilter type 34 type GenderFilter struct { 35 Type string `json:"type"` 36 Genders []GenderType `json:"oneOf"` 37 } 38 39 // NewGenderFilter function 40 func NewGenderFilter(genders ...GenderType) *GenderFilter { 41 return &GenderFilter{ 42 Type: "gender", 43 Genders: genders, 44 } 45 } 46 47 // DemographicFilter implements DemographicFilter interface 48 func (*GenderFilter) DemographicFilter() {} 49 50 // AgeType type 51 type AgeType string 52 53 // AgeType constants 54 const ( 55 AgeEmpty AgeType = "" 56 Age15 AgeType = "age_15" 57 Age20 AgeType = "age_20" 58 Age25 AgeType = "age_25" 59 Age30 AgeType = "age_30" 60 Age35 AgeType = "age_35" 61 Age40 AgeType = "age_40" 62 Age45 AgeType = "age_45" 63 Age50 AgeType = "age_50" 64 ) 65 66 // AgeFilter type 67 type AgeFilter struct { 68 Type string `json:"type"` 69 GTE AgeType `json:"gte,omitempty"` // greater than or equal to 70 LT AgeType `json:"lt,omitempty"` // less than 71 } 72 73 // NewAgeFilter function 74 func NewAgeFilter(gte, lt AgeType) *AgeFilter { 75 return &AgeFilter{ 76 Type: "age", 77 GTE: gte, 78 LT: lt, 79 } 80 } 81 82 // DemographicFilter implements DemographicFilter interface 83 func (*AgeFilter) DemographicFilter() {} 84 85 // AppType type 86 type AppType string 87 88 // AppType constants 89 const ( 90 AppTypeIOS AppType = "ios" 91 AppTypeAndroid AppType = "android" 92 ) 93 94 // AppTypeFilter type 95 type AppTypeFilter struct { 96 Type string `json:"type"` 97 AppTypes []AppType `json:"oneOf"` 98 } 99 100 // NewAppTypeFilter function 101 func NewAppTypeFilter(appTypes ...AppType) *AppTypeFilter { 102 return &AppTypeFilter{ 103 Type: "appType", 104 AppTypes: appTypes, 105 } 106 } 107 108 // DemographicFilter implements DemographicFilter interface 109 func (*AppTypeFilter) DemographicFilter() {} 110 111 // AreaType type 112 type AreaType string 113 114 // AreaType constants 115 const ( 116 AreaJPHokkaido AreaType = "jp_01" 117 AreaJPAomori AreaType = "jp_02" 118 AreaJPIwate AreaType = "jp_03" 119 AreaJPMiyagi AreaType = "jp_04" 120 AreaJPAkita AreaType = "jp_05" 121 AreaJPYamagata AreaType = "jp_06" 122 AreaJPFukushima AreaType = "jp_07" 123 AreaJPIbaraki AreaType = "jp_08" 124 AreaJPTochigi AreaType = "jp_09" 125 AreaJPGunma AreaType = "jp_10" 126 AreaJPSaitama AreaType = "jp_11" 127 AreaJPChiba AreaType = "jp_12" 128 AreaJPTokyo AreaType = "jp_13" 129 AreaJPKanagawa AreaType = "jp_14" 130 AreaJPNiigata AreaType = "jp_15" 131 AreaJPToyama AreaType = "jp_16" 132 AreaJPIshikawa AreaType = "jp_17" 133 AreaJPFukui AreaType = "jp_18" 134 AreaJPYamanashi AreaType = "jp_19" 135 AreaJPNagano AreaType = "jp_20" 136 AreaJPGifu AreaType = "jp_21" 137 AreaJPShizuoka AreaType = "jp_22" 138 AreaJPAichi AreaType = "jp_23" 139 AreaJPMie AreaType = "jp_24" 140 AreaJPShiga AreaType = "jp_25" 141 AreaJPKyoto AreaType = "jp_26" 142 AreaJPOsaka AreaType = "jp_27" 143 AreaJPHyougo AreaType = "jp_28" 144 AreaJPNara AreaType = "jp_29" 145 AreaJPWakayama AreaType = "jp_30" 146 AreaJPTottori AreaType = "jp_31" 147 AreaJPShimane AreaType = "jp_32" 148 AreaJPOkayama AreaType = "jp_33" 149 AreaJPHiroshima AreaType = "jp_34" 150 AreaJPYamaguchi AreaType = "jp_35" 151 AreaJPTokushima AreaType = "jp_36" 152 AreaJPKagawa AreaType = "jp_37" 153 AreaJPEhime AreaType = "jp_38" 154 AreaJPKouchi AreaType = "jp_39" 155 AreaJPFukuoka AreaType = "jp_40" 156 AreaJPSaga AreaType = "jp_41" 157 AreaJPNagasaki AreaType = "jp_42" 158 AreaJPKumamoto AreaType = "jp_43" 159 AreaJPOita AreaType = "jp_44" 160 AreaJPMiyazaki AreaType = "jp_45" 161 AreaJPKagoshima AreaType = "jp_46" 162 AreaJPOkinawa AreaType = "jp_47" 163 AreaTWTaipeiCity AreaType = "tw_01" 164 AreaTWNewTaipeiCity AreaType = "tw_02" 165 AreaTWTaoyuanCity AreaType = "tw_03" 166 AreaTWTaichungCity AreaType = "tw_04" 167 AreaTWTainanCity AreaType = "tw_05" 168 AreaTWKaohsiungCity AreaType = "tw_06" 169 AreaTWKeelungCity AreaType = "tw_07" 170 AreaTWHsinchuCity AreaType = "tw_08" 171 AreaTWChiayiCity AreaType = "tw_09" 172 AreaTWHsinchuCounty AreaType = "tw_10" 173 AreaTWMiaoliCounty AreaType = "tw_11" 174 AreaTWChanghuaCounty AreaType = "tw_12" 175 AreaTWNantouCounty AreaType = "tw_13" 176 AreaTWYunlinCounty AreaType = "tw_14" 177 AreaTWChiayiCounty AreaType = "tw_15" 178 AreaTWPingtungCounty AreaType = "tw_16" 179 AreaTWYilanCounty AreaType = "tw_17" 180 AreaTWHualienCounty AreaType = "tw_18" 181 AreaTWTaitungCounty AreaType = "tw_19" 182 AreaTWPenghuCounty AreaType = "tw_20" 183 AreaTWKinmenCounty AreaType = "tw_21" 184 AreaTWLienchiangCounty AreaType = "tw_22" 185 AreaTHBangkok AreaType = "th_01" 186 AreaTHPattaya AreaType = "th_02" 187 AreaTHNorthern AreaType = "th_03" 188 AreaTHCentral AreaType = "th_04" 189 AreaTHSouthern AreaType = "th_05" 190 AreaTHEastern AreaType = "th_06" 191 AreaTHNorthEastern AreaType = "th_07" 192 AreaTHWestern AreaType = "th_08" 193 AreaIDBali AreaType = "id_01" 194 AreaIDBandung AreaType = "id_02" 195 AreaIDBanjarmasin AreaType = "id_03" 196 AreaIDJabodetabek AreaType = "id_04" 197 AreaIDLainnya AreaType = "id_05" 198 AreaIDMakassar AreaType = "id_06" 199 AreaIDMedan AreaType = "id_07" 200 AreaIDPalembang AreaType = "id_08" 201 AreaIDSamarinda AreaType = "id_09" 202 AreaIDSemarang AreaType = "id_10" 203 AreaIDSurabaya AreaType = "id_11" 204 AreaIDYogyakarta AreaType = "id_12" 205 ) 206 207 // AreaFilter type 208 type AreaFilter struct { 209 Type string `json:"type"` 210 Areas []AreaType `json:"oneOf"` 211 } 212 213 // NewAreaFilter function 214 func NewAreaFilter(areaTypes ...AreaType) *AreaFilter { 215 return &AreaFilter{ 216 Type: "area", 217 Areas: areaTypes, 218 } 219 } 220 221 // DemographicFilter implements DemographicFilter interface 222 func (*AreaFilter) DemographicFilter() {} 223 224 // PeriodType type 225 type PeriodType string 226 227 // PeriodType constants 228 const ( 229 PeriodEmpty PeriodType = "" 230 PeriodDay7 PeriodType = "day_7" 231 PeriodDay30 PeriodType = "day_30" 232 PeriodDay90 PeriodType = "day_90" 233 PeriodDay180 PeriodType = "day_180" 234 PeriodDay365 PeriodType = "day_365" 235 ) 236 237 // SubscriptionPeriodFilter type 238 type SubscriptionPeriodFilter struct { 239 Type string `json:"type"` 240 GTE PeriodType `json:"gte,omitempty"` // greater than or equal to 241 LT PeriodType `json:"lt,omitempty"` // less than 242 } 243 244 // NewSubscriptionPeriodFilter function 245 func NewSubscriptionPeriodFilter(gte, lt PeriodType) *SubscriptionPeriodFilter { 246 return &SubscriptionPeriodFilter{ 247 Type: "subscriptionPeriod", 248 GTE: gte, 249 LT: lt, 250 } 251 } 252 253 // DemographicFilter implements DemographicFilter interface 254 func (*SubscriptionPeriodFilter) DemographicFilter() {} 255 256 // DemographicFilterOperator struct 257 type DemographicFilterOperator struct { 258 ConditionAnd []DemographicFilter `json:"and,omitempty"` 259 ConditionOr []DemographicFilter `json:"or,omitempty"` 260 ConditionNot DemographicFilter `json:"not,omitempty"` 261 } 262 263 // DemographicFilterOperatorAnd method 264 func DemographicFilterOperatorAnd(conditions ...DemographicFilter) *DemographicFilterOperator { 265 return &DemographicFilterOperator{ 266 ConditionAnd: conditions, 267 } 268 } 269 270 // DemographicFilterOperatorOr method 271 func DemographicFilterOperatorOr(conditions ...DemographicFilter) *DemographicFilterOperator { 272 return &DemographicFilterOperator{ 273 ConditionOr: conditions, 274 } 275 } 276 277 // DemographicFilterOperatorNot method 278 func DemographicFilterOperatorNot(condition DemographicFilter) *DemographicFilterOperator { 279 return &DemographicFilterOperator{ 280 ConditionNot: condition, 281 } 282 } 283 284 // MarshalJSON method of DemographicFilterOperator 285 func (o *DemographicFilterOperator) MarshalJSON() ([]byte, error) { 286 return json.Marshal(&struct { 287 Type string `json:"type"` 288 ConditionAnd []DemographicFilter `json:"and,omitempty"` 289 ConditionOr []DemographicFilter `json:"or,omitempty"` 290 ConditionNot DemographicFilter `json:"not,omitempty"` 291 }{ 292 Type: "operator", 293 ConditionAnd: o.ConditionAnd, 294 ConditionOr: o.ConditionOr, 295 ConditionNot: o.ConditionNot, 296 }) 297 } 298 299 // DemographicFilter implements DemographicFilter interface 300 func (*DemographicFilterOperator) DemographicFilter() {}