首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新后的Postgrex版本的扩展行为

更新后的Postgrex版本的扩展行为
EN

Stack Overflow用户
提问于 2018-03-29 06:06:15
回答 1查看 81关注 0票数 0

我有这个JSON模块

代码语言:javascript
复制
defmodule EvercamMedia.Types.JSON do
  @behaviour Ecto.Type

  def type, do: :json

  def cast(term)
      when is_map(term)
        or is_binary(term)
        or is_list(term)
        or is_number(term),
    do: {:ok, term}

  def cast(_), do: :error

  def load(term), do: {:ok, term}

  def dump(term), do: {:ok, term}
end

defmodule EvercamMedia.Types.JSON.Extension do
  alias Postgrex.TypeInfo

  @behaviour Postgrex.Extension

  def init(_parameters, opts),
    do: Keyword.fetch!(opts, :library)

  def matching(_library),
    do: [type: "json", type: "jsonb"]

  def format(_library),
    do: :binary

  def encode(%TypeInfo{type: "json"}, map, _state, library),
    do: library.encode!(map)
  def encode(%TypeInfo{type: "jsonb"}, map, _state, library),
    do: <<1, library.encode!(map)::binary>>

  def decode(%TypeInfo{type: "json"}, json, _state, library),
    do: library.decode!(json)
  def decode(%TypeInfo{type: "jsonb"}, <<1, json::binary>>, _state, library),
    do: library.decode!(json)
end

我收到了很多警告

代码语言:javascript
复制
warning: undefined behaviour function decode/1 (for behaviour Postgrex.Extension)
  lib/evercam_media/json.ex:20
warning: undefined behaviour function encode/1 (for behaviour Postgrex.Extension)
  lib/evercam_media/json.ex:20
warning: undefined behaviour function init/1 (for behaviour Postgrex.Extension

我们使用它来处理JSON。我只想去掉那些警告。我知道这是过时的postgrex版本,但我只想消除这些警告。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-29 07:29:58

定义Postgrex.Extension behaviour decode/1 (以及encode/1init/1)所请求的内容。如果你不打算使用它,那就做:

代码语言:javascript
复制
def decode(_), do: :ok
def encode(_), do: :ok
def init(_), do: :ok

这里的问题是@behaviour声明了许多回调,这是,任何实现的契约。除非实现实现所有回调,否则Elixir编译器会发出警告。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49549080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档