cloud-waba-ruby-client 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/.env.example +9 -0
  3. data/.gitignore +2 -0
  4. data/.rspec +2 -0
  5. data/Gemfile +2 -0
  6. data/Gemfile.lock +70 -0
  7. data/README.md +176 -0
  8. data/bin/console +30 -0
  9. data/cloud-waba-ruby-client.gemspec +24 -0
  10. data/lib/api/messages/service.rb +217 -0
  11. data/lib/api/templates/service.rb +108 -0
  12. data/lib/cloud_waba/client.rb +62 -0
  13. data/lib/cloud_waba/http_client.rb +53 -0
  14. data/lib/cloud_waba/models/config.rb +16 -0
  15. data/lib/cloud_waba/models/contact.rb +10 -0
  16. data/lib/cloud_waba/models/enums/contact_phone_type.rb +17 -0
  17. data/lib/cloud_waba/models/enums/messaging_product.rb +13 -0
  18. data/lib/cloud_waba/models/enums/templates/button_type.rb +19 -0
  19. data/lib/cloud_waba/models/enums/templates/category.rb +19 -0
  20. data/lib/cloud_waba/models/enums/templates/component_type.rb +20 -0
  21. data/lib/cloud_waba/models/enums/templates/format.rb +19 -0
  22. data/lib/cloud_waba/models/messages/contact.rb +76 -0
  23. data/lib/cloud_waba/models/messages/contact_name.rb +29 -0
  24. data/lib/cloud_waba/models/messages/contact_phone.rb +28 -0
  25. data/lib/cloud_waba/models/messages/response.rb +40 -0
  26. data/lib/cloud_waba/models/templates/body_component.rb +22 -0
  27. data/lib/cloud_waba/models/templates/button.rb +18 -0
  28. data/lib/cloud_waba/models/templates/buttons/copy_code.rb +15 -0
  29. data/lib/cloud_waba/models/templates/buttons/otp.rb +19 -0
  30. data/lib/cloud_waba/models/templates/buttons/phone_number.rb +16 -0
  31. data/lib/cloud_waba/models/templates/buttons/quick_reply.rb +15 -0
  32. data/lib/cloud_waba/models/templates/buttons/url.rb +17 -0
  33. data/lib/cloud_waba/models/templates/buttons_component.rb +13 -0
  34. data/lib/cloud_waba/models/templates/component.rb +19 -0
  35. data/lib/cloud_waba/models/templates/example.rb +12 -0
  36. data/lib/cloud_waba/models/templates/footer_component.rb +20 -0
  37. data/lib/cloud_waba/models/templates/header_location_component.rb +19 -0
  38. data/lib/cloud_waba/models/templates/header_media_component.rb +22 -0
  39. data/lib/cloud_waba/models/templates/header_text_component.rb +23 -0
  40. data/lib/cloud_waba/models/templates/list.rb +16 -0
  41. data/lib/cloud_waba/models/templates/message_template.rb +14 -0
  42. data/lib/cloud_waba/models/templates/response.rb +34 -0
  43. data/lib/cloud_waba/utils.rb +42 -0
  44. data/spec/cloud_waba_spec.rb +4 -0
  45. data/spec/spec_helper.rb +10 -0
  46. metadata +190 -0
@@ -0,0 +1,62 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ require "sorbet-runtime"
5
+
6
+ # Enums
7
+ require_relative "models/enums/messaging_product"
8
+ require_relative "models/enums/templates/category"
9
+ require_relative "models/enums/templates/component_type"
10
+ require_relative "models/enums/templates/button_type"
11
+ require_relative "models/enums/templates/format"
12
+ require_relative "models/enums/contact_phone_type"
13
+ # Models
14
+ require_relative "models/config"
15
+ require_relative "models/contact"
16
+ require_relative "models/messages/response"
17
+ require_relative "models/messages/contact_name"
18
+ require_relative "models/messages/contact_phone"
19
+ require_relative "models/messages/contact"
20
+
21
+ require_relative "models/templates/example"
22
+ require_relative "models/templates/component"
23
+ require_relative "models/templates/header_text_component"
24
+ require_relative "models/templates/header_media_component"
25
+ require_relative "models/templates/header_location_component"
26
+ require_relative "models/templates/body_component"
27
+ require_relative "models/templates/footer_component"
28
+ require_relative "models/templates/button"
29
+ require_relative "models/templates/buttons/copy_code"
30
+ require_relative "models/templates/buttons/otp"
31
+ require_relative "models/templates/buttons/phone_number"
32
+ require_relative "models/templates/buttons/quick_reply"
33
+ require_relative "models/templates/buttons/url"
34
+ require_relative "models/templates/buttons_component"
35
+ require_relative "models/templates/message_template"
36
+ require_relative "models/templates/response"
37
+ require_relative "models/templates/list"
38
+ # Helpers
39
+ require_relative "utils"
40
+ require_relative "http_client"
41
+ # Services
42
+ require_relative "../api/messages/service"
43
+ require_relative "../api/templates/service"
44
+
45
+ module CloudWaba
46
+ class Client
47
+ extend ::T::Sig
48
+ extend ::T::Helpers
49
+
50
+ def initialize
51
+ @config = ::CloudWaba::Utils.import_config
52
+ end
53
+
54
+ def messages
55
+ ::API::Messages::Service.new(config: @config)
56
+ end
57
+
58
+ def templates
59
+ ::API::Templates::Service.new(config: @config)
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,53 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ require "http"
5
+
6
+ module CloudWaba
7
+ class HttpClient
8
+ attr_accessor :base_url
9
+ attr_accessor :auth_token
10
+
11
+ def initialize(base_url:, auth_token:)
12
+ @base_url = base_url
13
+ @auth_token = auth_token
14
+ end
15
+
16
+ def get(headers: {}, params: {})
17
+ client = http_client.headers(headers)
18
+ client = client.auth("Bearer #{@auth_token}") unless @auth_token.nil?
19
+ response = client.get(@base_url, ssl_context: ssl_ctx, params: params)
20
+ end
21
+
22
+ def post(headers: {}, body:)
23
+ client = http_client.headers(headers)
24
+ client = client.auth("Bearer #{@auth_token}") unless @auth_token.nil?
25
+ response = client.post(@base_url, ssl_context: ssl_ctx, json: body)
26
+ end
27
+
28
+ def put(headers: {}, body:)
29
+ client = http_client.headers(headers)
30
+ client = client.auth("Bearer #{@auth_token}") unless @auth_token.nil?
31
+ response = client.put(@base_url, ssl_context: ssl_ctx, json: body.to_json)
32
+ end
33
+
34
+ def delete(headers:{}, params:{})
35
+ client = http_client.headers(headers)
36
+ client = client.auth("Bearer #{@auth_token}") unless @auth_token.nil?
37
+ response = client.delete(@base_url, ssl_context: ssl_ctx, params: params)
38
+ end
39
+
40
+ private
41
+
42
+ def http_client
43
+ HTTP.follow(max_hops: 3)
44
+ end
45
+
46
+ def ssl_ctx
47
+ ctx = OpenSSL::SSL::SSLContext.new
48
+ ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE
49
+
50
+ ctx
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,16 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module CloudWaba
5
+ module Models
6
+ class Config < T::Struct
7
+ prop :base_url, ::String
8
+ prop :app_id, ::String
9
+ prop :app_secret, ::String
10
+ prop :phone_number_id, ::String
11
+ prop :business_account_id, ::String
12
+ prop :access_token, ::String
13
+ prop :api_version, ::String
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,10 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module CloudWaba
5
+ module Models
6
+ class Contact < ::T::Struct
7
+ prop :wa_id, ::String
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,17 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+ module CloudWaba
4
+ module Models
5
+ module Enums
6
+ class ContactPhoneType < T::Enum
7
+ enums do
8
+ Main = new("MAIN")
9
+ Cell = new("CELL")
10
+ Iphone = new("IPHONE")
11
+ Home = new("HOME")
12
+ Work = new("WORK")
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,13 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+ module CloudWaba
4
+ module Models
5
+ module Enums
6
+ class MessagingProduct < T::Enum
7
+ enums do
8
+ WhatsApp = new("whatsapp")
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+ module CloudWaba
4
+ module Models
5
+ module Enums
6
+ module Templates
7
+ class ButtonType < T::Enum
8
+ enums do
9
+ CopyCode = new("COPY_CODE")
10
+ Otp = new("OTP")
11
+ PhoneNumber = new("PHONE_NUMBER")
12
+ QuickReply = new("QUICK_REPLY")
13
+ Url = new("URL")
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module CloudWaba
5
+ module Models
6
+ module Enums
7
+ module Templates
8
+ class Category < T::Enum
9
+ enums do
10
+ Authentication = new("AUTHENTICATION")
11
+ Marketing = new("MARKETING")
12
+ Utility = new("UTILITY")
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+
@@ -0,0 +1,20 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+ module CloudWaba
4
+ module Models
5
+ module Enums
6
+ module Templates
7
+ class ComponentType < T::Enum
8
+ enums do
9
+ Header = new("HEADER")
10
+ Body = new("BODY")
11
+ Footer = new("FOOTER")
12
+ Buttons = new("BUTTONS")
13
+ Carousel = new("CAROUSEL")
14
+ LimitedTimeOffer = new("LIMITED_TIME_OFFER")
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module CloudWaba
5
+ module Models
6
+ module Enums
7
+ module Templates
8
+ class Format < T::Enum
9
+ enums do
10
+ Image = new("IMAGE")
11
+ Video = new("VIDEO")
12
+ Document = new("DOCUMENT")
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+
@@ -0,0 +1,76 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module CloudWaba
5
+ module Models
6
+ module Messages
7
+ class Contact < T::Struct
8
+ extend ::T::Sig
9
+ extend ::T::Helpers
10
+
11
+ # {
12
+ # "addresses": [{
13
+ # "street": "STREET",
14
+ # "city": "CITY",
15
+ # "state": "STATE",
16
+ # "zip": "ZIP",
17
+ # "country": "COUNTRY",
18
+ # "country_code": "COUNTRY_CODE",
19
+ # "type": "HOME"
20
+ # },
21
+ # {
22
+ # "street": "STREET",
23
+ # "city": "CITY",
24
+ # "state": "STATE",
25
+ # "zip": "ZIP",
26
+ # "country": "COUNTRY",
27
+ # "country_code": "COUNTRY_CODE",
28
+ # "type": "WORK"
29
+ # }],
30
+ # "birthday": "YEAR_MONTH_DAY",
31
+ # "emails": [{
32
+ # "email": "EMAIL",
33
+ # "type": "WORK"
34
+ # },
35
+ # {
36
+ # "email": "EMAIL",
37
+ # "type": "HOME"
38
+ # }],
39
+ # "name": {
40
+ # "formatted_name": "NAME",
41
+ # "first_name": "FIRST_NAME",
42
+ # "last_name": "LAST_NAME",
43
+ # "middle_name": "MIDDLE_NAME",
44
+ # "suffix": "SUFFIX",
45
+ # "prefix": "PREFIX"
46
+ # },
47
+ # "org": {
48
+ # "company": "COMPANY",
49
+ # "department": "DEPARTMENT",
50
+ # "title": "TITLE"
51
+ # },
52
+ # "phones": [{
53
+ # "phone": "PHONE_NUMBER",
54
+ # "type": "HOME"
55
+ # },
56
+ # {
57
+ # "phone": "PHONE_NUMBER",
58
+ # "type": "WORK",
59
+ # "wa_id": "PHONE_OR_WA_ID"
60
+ # }],
61
+ # "urls": [{
62
+ # "url": "URL",
63
+ # "type": "WORK"
64
+ # },
65
+ # {
66
+ # "url": "URL",
67
+ # "type": "HOME"
68
+ # }]
69
+ # }
70
+
71
+ prop :name, ::CloudWaba::Models::Messages::ContactName
72
+ prop :phones, ::T.nilable(::T::Array[::CloudWaba::Models::Messages::ContactPhone])
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,29 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module CloudWaba
5
+ module Models
6
+ module Messages
7
+ class ContactName < T::Struct
8
+ extend ::T::Sig
9
+ extend ::T::Helpers
10
+
11
+ # "name": {
12
+ # "formatted_name": "NAME",
13
+ # "first_name": "FIRST_NAME",
14
+ # "last_name": "LAST_NAME",
15
+ # "middle_name": "MIDDLE_NAME",
16
+ # "suffix": "SUFFIX",
17
+ # "prefix": "PREFIX"
18
+ # }
19
+
20
+ prop :formatted_name, ::String
21
+ prop :first_name, ::T.nilable(::String)
22
+ prop :last_name, ::T.nilable(::String)
23
+ prop :middle_name, ::T.nilable(::String)
24
+ prop :suffix, ::T.nilable(::String)
25
+ prop :prefix, ::T.nilable(::String)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,28 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module CloudWaba
5
+ module Models
6
+ module Messages
7
+ class ContactPhone < T::Struct
8
+ extend ::T::Sig
9
+ extend ::T::Helpers
10
+
11
+ # {
12
+ # "phone": "PHONE_NUMBER",
13
+ # "type": "HOME"
14
+ # }
15
+ #
16
+ # {
17
+ # "phone": "PHONE_NUMBER",
18
+ # "type": "WORK",
19
+ # "wa_id": "PHONE_OR_WA_ID"
20
+ # }
21
+
22
+ prop :phone, ::String
23
+ prop :type, ::CloudWaba::Models::Enums::ContactPhoneType
24
+ prop :wa_id, ::T.nilable(::String)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,40 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ # require 'pry'
5
+
6
+ module CloudWaba
7
+ module Models
8
+ module Messages
9
+ class Response < T::Struct
10
+ extend ::T::Sig
11
+ extend ::T::Helpers
12
+ ##
13
+ # {
14
+ # "messaging_product"=>"whatsapp",
15
+ # "contacts"=>[
16
+ # {"input"=>"+201111111111", "wa_id"=>"202222222222"}
17
+ # ],
18
+ # "messages"=>[
19
+ # {"id"=>"wamid.HBgMMjUIzSNRIREAMOjAFQzxRjygADgAMAD1FQExzzIQMMjzM2UMxZ=="}
20
+ # ]
21
+ # }
22
+ prop :messaging_product, ::CloudWaba::Models::Enums::MessagingProduct
23
+ prop :contacts, ::T::Array[::CloudWaba::Models::Contact]
24
+ prop :message_id, ::String
25
+
26
+ sig { params(hash: ::T::Hash[::T.untyped, ::T.untyped]).returns(::CloudWaba::Models::Messages::Response) }
27
+ def self.parse(hash:)
28
+ contact_wa_id = hash["contacts"][0]["wa_id"]
29
+ message_id = hash["messages"][0]["id"]
30
+
31
+ self.new(
32
+ messaging_product: ::CloudWaba::Models::Enums::MessagingProduct::WhatsApp,
33
+ contacts: [::CloudWaba::Models::Contact.new(wa_id: contact_wa_id)],
34
+ message_id: message_id
35
+ )
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,22 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module CloudWaba
5
+ module Models
6
+ module Templates
7
+ class BodyComponent < T::Struct
8
+ prop :type, ::CloudWaba::Models::Enums::Templates::ComponentType, default: ::CloudWaba::Models::Enums::Templates::ComponentType::Body
9
+ prop :text, ::String
10
+ prop :example, ::T.nilable(::CloudWaba::Models::Templates::Example)
11
+
12
+ def serialize
13
+ {
14
+ type: type.serialize,
15
+ text: text,
16
+ example: { body_text: [ example.values ] }
17
+ }
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,18 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module CloudWaba
5
+ module Models
6
+ module Templates
7
+ Button = T.type_alias do
8
+ T.any(
9
+ ::CloudWaba::Models::Templates::Buttons::CopyCode,
10
+ ::CloudWaba::Models::Templates::Buttons::Otp,
11
+ ::CloudWaba::Models::Templates::Buttons::PhoneNumber,
12
+ ::CloudWaba::Models::Templates::Buttons::QuickReply,
13
+ ::CloudWaba::Models::Templates::Buttons::Url,
14
+ )
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,15 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module CloudWaba
5
+ module Models
6
+ module Templates
7
+ module Buttons
8
+ class CopyCode < T::Struct
9
+ prop :type, ::CloudWaba::Models::Enums::Templates::ButtonType, default: ::CloudWaba::Models::Enums::Templates::ButtonType::CopyCode
10
+ prop :example, ::String
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,19 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module CloudWaba
5
+ module Models
6
+ module Templates
7
+ module Buttons
8
+ class Otp < T::Struct
9
+ prop :type, ::CloudWaba::Models::Enums::Templates::ButtonType, default: ::CloudWaba::Models::Enums::Templates::ButtonType::Otp
10
+ prop :otp_type, ::String
11
+ prop :text, ::String
12
+ prop :autofill_text, ::String
13
+ prop :package_name, ::String
14
+ prop :signature_hash, ::String
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module CloudWaba
5
+ module Models
6
+ module Templates
7
+ module Buttons
8
+ class PhoneNumber < T::Struct
9
+ prop :type, ::CloudWaba::Models::Enums::Templates::ButtonType, default: ::CloudWaba::Models::Enums::Templates::ButtonType::PhoneNumber
10
+ prop :text, ::String
11
+ prop :phone_number, ::String
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module CloudWaba
5
+ module Models
6
+ module Templates
7
+ module Buttons
8
+ class QuickReply < T::Struct
9
+ prop :type, ::CloudWaba::Models::Enums::Templates::ButtonType, default: ::CloudWaba::Models::Enums::Templates::ButtonType::QuickReply
10
+ prop :text, ::String
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module CloudWaba
5
+ module Models
6
+ module Templates
7
+ module Buttons
8
+ class Url < T::Struct
9
+ prop :type, ::CloudWaba::Models::Enums::Templates::ButtonType, default: ::CloudWaba::Models::Enums::Templates::ButtonType::Url
10
+ prop :text, ::String
11
+ prop :url, ::String
12
+ prop :example, ::T.nilable(::T::Array[::String])
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,13 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module CloudWaba
5
+ module Models
6
+ module Templates
7
+ class ButtonsComponent < T::Struct
8
+ prop :type, ::CloudWaba::Models::Enums::Templates::ComponentType, default: ::CloudWaba::Models::Enums::Templates::ComponentType::Buttons
9
+ prop :buttons, ::T::Array[::CloudWaba::Models::Templates::Button]
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module CloudWaba
5
+ module Models
6
+ module Templates
7
+ Component = T.type_alias do
8
+ T.any(
9
+ ::CloudWaba::Models::Templates::HeaderTextComponent,
10
+ ::CloudWaba::Models::Templates::HeaderMediaComponent,
11
+ ::CloudWaba::Models::Templates::HeaderLocationComponent,
12
+ ::CloudWaba::Models::Templates::BodyComponent,
13
+ ::CloudWaba::Models::Templates::FooterComponent,
14
+ ::CloudWaba::Models::Templates::ButtonsComponent,
15
+ )
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,12 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module CloudWaba
5
+ module Models
6
+ module Templates
7
+ class Example < T::Struct
8
+ prop :values, ::T::Array[::String]
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,20 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module CloudWaba
5
+ module Models
6
+ module Templates
7
+ class FooterComponent < T::Struct
8
+ prop :type, ::CloudWaba::Models::Enums::Templates::ComponentType, default: ::CloudWaba::Models::Enums::Templates::ComponentType::Footer
9
+ prop :text, ::String
10
+
11
+ def serialize
12
+ {
13
+ type: type.serialize,
14
+ text: text
15
+ }
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module CloudWaba
5
+ module Models
6
+ module Templates
7
+ class HeaderLocationComponent < T::Struct
8
+ prop :type, ::CloudWaba::Models::Enums::Templates::ComponentType, default: ::CloudWaba::Models::Enums::Templates::ComponentType::Header
9
+
10
+ def serialize
11
+ {
12
+ type: type.serialize,
13
+ format: "LOCATION"
14
+ }
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,22 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module CloudWaba
5
+ module Models
6
+ module Templates
7
+ class HeaderMediaComponent < T::Struct
8
+ prop :type, ::CloudWaba::Models::Enums::Templates::ComponentType, default: ::CloudWaba::Models::Enums::Templates::ComponentType::Header
9
+ prop :format, ::CloudWaba::Models::Enums::Templates::Format
10
+ prop :example, ::CloudWaba::Models::Templates::Example
11
+
12
+ def serialize
13
+ {
14
+ type: type.serialize,
15
+ format: format.serialize,
16
+ example: { header_handle: [ example.values ] }
17
+ }
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end