%% Licensed to the Apache Software Foundation (ASF) under one %% or more contributor license agreements. See the NOTICE file %% distributed with this work for additional information %% regarding copyright ownership. The ASF licenses this file %% to you under the Apache License, Version 2.0 (the %% "License"); you may not use this file except in compliance %% with the License. You may obtain a copy of the License at %% %% http://www.apache.org/licenses/LICENSE-2.0 %% %% Unless required by applicable law or agreed to in writing, %% software distributed under the License is distributed on an %% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY %% KIND, either express or implied. See the License for the %% specific language governing permissions and limitations %% under the License. %% %% @hidden -module(systemd_protocol). -export([encode/1, encode_field/2]). -type field_name() :: atom() | unicode:chardata(). -type field_data() :: iodata(). %% @doc %% Encode list of fields %% @end encode(Fields) when is_list(Fields) -> [encode_field(Name, Data) || {Name, Data} <- Fields]. %% @doc %% Encode single field %% @end -spec encode_field(Name::field_name(), Data::field_data()) -> iodata(). encode_field(Name, Data) -> case string:is_empty(Data) of true -> []; false -> Sep = case string:find(Data, "\n") of nomatch -> "="; _ -> Len = iolist_size(Data), [$\n, <>] end, [field_name(Name), Sep, Data, $\n] end. -spec field_name(field_name()) -> unicode:chardata(). field_name(Atom) when is_atom(Atom) -> field_name(atom_to_binary(Atom, utf8)); field_name(Name) -> string:uppercase(Name).