Korero – Rev 1
?pathlinks?
///////////////////////////////////////////////////////////////////////////
// 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.