Korero – Rev 1

Subversion Repositories:
Rev:
///////////////////////////////////////////////////////////////////////////
//  Copyright (C) Wizardry and Steamworks 2013 - License: GNU GPLv3      //
//  Please see: http://www.gnu.org/licenses/gpl.html for legal details,  //
//  rights of fair usage, the disclaimer and warranty conditions.        //
///////////////////////////////////////////////////////////////////////////

using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Korero.Serialization
{
    public static class KeyValue
    {
        #region Public Methods

        ///////////////////////////////////////////////////////////////////////////
        //    Copyright (C) 2014 Wizardry and Steamworks - License: GNU GPLv3    //
        ///////////////////////////////////////////////////////////////////////////
        /// <summary>
        ///     Returns the value of a key from a key-value data string.
        /// </summary>
        /// <returns>true if the key was found in data</returns>
        public static string Get(string key, string data)
        {
            return data.Split('&')
                .Select(o => o.Split('='))
                .Where(o => o.Length.Equals(2) && o[0] == key)
                .Select(o => o[1])
                .FirstOrDefault();
        }

        ///////////////////////////////////////////////////////////////////////////
        //    Copyright (C) 2014 Wizardry and Steamworks - License: GNU GPLv3    //
        ///////////////////////////////////////////////////////////////////////////
        /// <summary>
        ///     Returns a key-value data string with a key set to a given value.
        /// </summary>
        /// <returns>
        ///     a key-value data string or the empty string if either key or
        ///     value are empty
        /// </returns>
        public static string Set(string key, string value, string data)
        {
            return string.Join("&",
                string.Join("&",
                    data.Split('&')
                        .Select(o => o.Split('='))
                        .Where(o => o.Length.Equals(2) && o[0] == key)
                        .Select(o => o[0] + "=" + o[1])),
                key + "=" + value);
        }

        ///////////////////////////////////////////////////////////////////////////
        //    Copyright (C) 2014 Wizardry and Steamworks - License: GNU GPLv3    //
        ///////////////////////////////////////////////////////////////////////////
        /// <summary>
        ///     Deletes a key-value pair from a string referenced by a key.
        /// </summary>
        /// <returns>a key-value pair string</returns>
        public static string Delete(string key, string data)
        {
            return string.Join("&",
                data.Split('&')
                    .Select(o => o.Split('='))
                    .Where(o => o.Length.Equals(2) && o[0] == key)
                    .Select(o => o[0] + "=" + o[1]));
        }

        ///////////////////////////////////////////////////////////////////////////
        //    Copyright (C) 2014 Wizardry and Steamworks - License: GNU GPLv3    //
        ///////////////////////////////////////////////////////////////////////////
        /// <summary>
        ///     Decodes key-value pair data to a dictionary.
        /// </summary>
        /// <returns>a dictionary containing the keys and values</returns>
        public static IEnumerable<KeyValuePair<string, string>> Decode(string data)
        {
            return data.Split('&')
                .Select(o => o.Split('='))
                .Where(o => o.Length.Equals(2))
                .Select(o => new
                {
                    k = o[0],
                    v = o[1]
                })
                .GroupBy(o => o.k)
                .ToDictionary(o => o.Key,
                    p => p.FirstOrDefault()
                        ?.v);
        }

        ///////////////////////////////////////////////////////////////////////////
        //    Copyright (C) 2014 Wizardry and Steamworks - License: GNU GPLv3    //
        ///////////////////////////////////////////////////////////////////////////
        /// <summary>
        ///     Serializes a dictionary to key-value data.
        /// </summary>
        /// <returns>a key-value data encoded string</returns>
        public static string Encode(Dictionary<string, string> data)
        {
            return string.Join("&", data.Select(o => $"{o.Key}={o.Value}"));
        }

        ///////////////////////////////////////////////////////////////////////////
        //    Copyright (C) 2014 Wizardry and Steamworks - License: GNU GPLv3    //
        ///////////////////////////////////////////////////////////////////////////
        /// <summary>
        ///     Serializes a dictionary to key-value data.
        /// </summary>
        /// <param name="data">an input string</param>
        /// <returns>a key-value data encoded string</returns>
        public static string Encode(IEnumerable<KeyValuePair<string, string>> data)
        {
            return string.Join("&", data.Select(o => $"{o.Key}={o.Value}"));
        }

        ///////////////////////////////////////////////////////////////////////////
        //    Copyright (C) 2018 Wizardry and Steamworks - License: GNU GPLv3    //
        ///////////////////////////////////////////////////////////////////////////
        /// <summary>
        ///     Asynchronously serializes a dictionary to key-value data.
        /// </summary>
        /// <param name="data">an input string</param>
        /// <returns>a key-value data encoded string</returns>
        public static string Encode(IEnumerable<KeyValuePair<Task<string>, Task<string>>> data)
        {
            return string.Join("&", data.Select(o => $"{o.Key.Result}={o.Value.Result}"));
        }

        #endregion
    }
}

Generated by GNU Enscript 1.6.5.90.