Current section
Files
Jump to
Current section
Files
lib/dns_record.ex
defmodule CloudflareApi.DnsRecord do
@moduledoc ~S"""
Makes a struct and convenience functions around A Cloudflare DNS record.
See Cloudflare docs: https://api.cloudflare.com/#dns-records-for-a-zone-properties
"""
alias CloudflareApi.Utils
@enforce_keys [:zone_id, :hostname, :ip]
defstruct [
:id,
:zone_id,
:zone_name,
:hostname,
:ip,
:created_on,
type: "A",
ttl: "1",
proxied: false,
proxiable: true,
locked: false
]
def cf_url(record) do
"https://api.cloudflare.com/client/v4/zones/#{record.zone_id}/dns_records"
end
def to_cf_json(record) do
%{
type: record.type,
name: record.hostname,
content: record.ip,
ttl: record.ttl,
proxied: record.proxied
}
end
def from_cf_json(%{zone_id: _} = record) do
record
|> Utils.map_atom_keys_to_strings()
|> from_cf_json()
end
def from_cf_json(record) do
%CloudflareApi.DnsRecord{
id: record["id"],
zone_id: record["zone_id"],
zone_name: record["zone_name"],
hostname: record["name"],
ip: record["content"],
created_on: record["created_on"],
type: record["type"],
ttl: record["ttl"],
proxied: record["proxied"],
proxiable: record["proxiable"],
locked: record["locked"]
}
end
end