% Up-to-date doc on how to write one of these schema files
% available at:
%   https://github.com/basho/cuttlefish/wiki/Cuttlefish-for-Erlang-Developers

{mapping,
    "partisan.binary_padding",
    "partisan.binary_padding",
    [
        {datatype, flag},
        {default, off}
    ]
}.

{mapping,
    "partisan.broadcast",
    "partisan.broadcast",
    [
        {datatype, flag},
        {default, off}
    ]
}.

%% @doc A comma-separated string where elements are modules implementing the
%% partisan_plumtree_broadcast_handler behaviour
{mapping,
    "partisan.broadcast.handlers",
    "partisan.broadcast_mods",
    [
        {datatype, integer},
        {validators, []}
    ]
}.

{translation, "partisan.broadcast_mods",
  fun(Conf) ->
    case cuttlefish:conf_get("partisan.broadcast.handlers", Conf) of
        Value when is_list(Value) ->
            [
              string:strip(Version) || Version <- string:split(Value, ",")
            ];
        _ ->
            cuttlefish:invalid(
              "value should be string containing valid comma separated version numbers e.g. \"1.2, 1.3\""
            )
    end
  end
}.

{mapping,
    "partisan.causal_labels",
    "partisan.causal_labels",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

%% @doc
{mapping,
    "partisan.channel_fallback",
    "partisan.channel_fallback",
    [
        {datatype, flag},
        {default, on}
    ]
}.

{mapping,
    "partisan.connect_disterl",
    "partisan.connect_disterl",
    [
        {datatype, flag},
        {default, off}
    ]
}.

{mapping,
    "partisan.connection.jitter",
    "partisan.connection_jitter",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.connection.interval",
    "partisan.connection_interval",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.disable_fast_forward",
    "partisan.disable_fast_forward",
    [
        {datatype, flag},
        {default, off}
    ]
}.

{mapping,
    "partisan.disable_fast_receive",
    "partisan.disable_fast_receive",
    [
        {datatype, flag},
        {default, off}
    ]
}.

{mapping,
    "partisan.distance_enabled",
    "partisan.distance_enabled",
    [
        {datatype, flag},
        {default, off}
    ]
}.

{mapping,
    "partisan.egress_delay",
    "partisan.egress_delay",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.exchange_selection",
    "partisan.exchange_selection",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.exchange_tick_period",
    "partisan.exchange_tick_period",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.fanout",
    "partisan.fanout",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.gossip",
    "partisan.gossip",
    [
        {datatype, flag},
        {default, off}
    ]
}.

{mapping,
    "partisan.hyparview",
    "partisan.hyparview",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.ingress_delay",
    "partisan.ingress_delay",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.lazy_tick_period",
    "partisan.lazy_tick_period",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.membership_binary_compression",
    "partisan.membership_binary_compression",
    [
        {datatype, flag},
        {default, off}
    ]
}.

{mapping,
    "partisan.membership_strategy",
    "partisan.membership_strategy",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.membership_strategy_tracing",
    "partisan.membership_strategy_tracing",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.orchestration_strategy",
    "partisan.orchestration_strategy",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.parallelism",
    "partisan.parallelism",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.peer_discovery.enabled",
    "partisan.peer_discovery.enabled",
    [
        {datatype, flag},
        {default, off}
    ]
}.

{mapping,
    "partisan.peer_service_manager",
    "partisan.peer_service_manager",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.peer_host",
    "partisan.peer_host",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.peer_ip",
    "partisan.peer_ip",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.peer_port",
    "partisan.peer_port",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.periodic_enabled",
    "partisan.periodic_enabled",
    [
        {datatype, flag},
        {default, off}
    ]
}.

{mapping,
    "partisan.periodic_interval",
    "partisan.periodic_interval",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.pid_encoding",
    "partisan.pid_encoding",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.random_seed",
    "partisan.random_seed",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.ref_encoding",
    "partisan.ref_encoding",
    [
        {datatype, flag},
        {default, off}
    ]
}.

{mapping,
    "partisan.register_pid_for_encoding",
    "partisan.register_pid_for_encoding",
    [
        {datatype, flag},
        {default, off}
    ]
}.

{mapping,
    "partisan.remote_ref_format",
    "partisan.remote_ref_format",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.remote_ref_uri_padding",
    "partisan.remote_ref_uri_padding",
    [
        {datatype, flag},
        {default, off}
    ]
}.

{mapping,
    "partisan.replaying",
    "partisan.replaying",
    [
        {datatype, flag},
        {default, off}
    ]
}.

{mapping,
    "partisan.retransmit_interval",
    "partisan.retransmit_interval",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.reservations",
    "partisan.reservations",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.shrinking",
    "partisan.shrinking",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.tag",
    "partisan.tag",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.tls.enabled",
    "partisan.tls",
    [
        {datatype, flag},
        {default, off}
    ]
}.

{mapping,
    "partisan.tls.client_options",
    "partisan.tls_client_options",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.tls.server_options",
    "partisan.tls_server_options",
    [
        {datatype, integer},
        {validators, []},
        {default, integer}
    ]
}.

{mapping,
    "partisan.tracing",
    "partisan.tracing",
    [
        {datatype, flag},
        {default, off}
    ]
}.
