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() {}