defmodule CFSync.Asset do @moduledoc """ The `Asset` struct holds data from Contentful assets. It's provided as is and is not configurable, so if you need more fields than those currently mapped, feel free to send a PR. """ @enforce_keys [ :id, :content_type, :space_id, :title, :description, :file_name, :url, :width, :height, :size ] defstruct [ :id, :content_type, :space_id, :title, :description, :file_name, :url, :width, :height, :size ] @type t :: %__MODULE__{ id: binary(), content_type: binary(), space_id: binary(), title: binary(), description: binary(), file_name: binary(), url: binary(), width: integer(), height: integer(), size: integer() } @doc false @spec new(map, binary()) :: t() def new( %{ "sys" => %{ "id" => id, "type" => "Asset", "space" => %{ "sys" => %{ "id" => space_id } } }, "fields" => fields }, locale ) do title = fields["title"][locale] || "" description = fields["description"][locale] || "" content_type = fields["file"][locale]["contentType"] || "" file_name = fields["file"][locale]["fileName"] || "" url = fields["file"][locale]["url"] || "" width = fields["file"][locale]["details"]["image"]["width"] || 0 height = fields["file"][locale]["details"]["image"]["height"] || 0 size = fields["file"][locale]["details"]["size"] || 0 %__MODULE__{ id: id, space_id: space_id, content_type: content_type, title: title, description: description, file_name: file_name, url: url, width: width, height: height, size: size } end end