blob: 31b7c21064ad9d08369abbbce452639b6d40ab84 [file] [log] [blame]
/*
* 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.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using Apache.Qpid.Proton.Types;
using Apache.Qpid.Proton.Types.Messaging;
namespace Apache.Qpid.Proton.Client.Implementation
{
/// <summary>
/// Conversion utilities useful for multiple client operations.
/// </summary>
internal static class ClientConversionSupport
{
public static Symbol[] ToSymbolArray(string[] stringArray)
{
Symbol[] result = null;
if (stringArray != null)
{
result = new Symbol[stringArray.Length];
for (int i = 0; i < stringArray.Length; ++i)
{
result[i] = Symbol.Lookup(stringArray[i]);
}
}
return result;
}
public static Symbol[] ToSymbolArray(IEnumerable<DeliveryStateType> stateTypeArray)
{
Symbol[] result = null;
if (stateTypeArray != null)
{
result = new Symbol[stateTypeArray.Count()];
for (int i = 0; i < result.Length; ++i)
{
result[i] = stateTypeArray.ElementAt(i).AsProtonType();
}
}
return result;
}
public static string[] ToStringArray(Symbol[] symbolArray)
{
string[] result = null;
if (symbolArray != null)
{
result = new string[symbolArray.Length];
for (int i = 0; i < symbolArray.Length; ++i)
{
result[i] = symbolArray[i].ToString();
}
}
return result;
}
public static Dictionary<Symbol, object> ToSymbolKeyedMap<V>(IEnumerable<KeyValuePair<string, V>> stringsMap)
{
Dictionary<Symbol, object> result;
if (stringsMap != null)
{
result = new Dictionary<Symbol, object>();
foreach (KeyValuePair<string, V> entry in stringsMap)
{
result.Add(Symbol.Lookup(entry.Key), entry.Value);
}
}
else
{
result = null;
}
return result;
}
public static Dictionary<string, object> ToStringKeyedMap<V>(IEnumerable<KeyValuePair<Symbol, V>> symbolMap)
{
Dictionary<string, object> result;
if (symbolMap != null)
{
result = new Dictionary<string, object>();
foreach (KeyValuePair<Symbol, V> entry in symbolMap)
{
result.Add(entry.Key.ToString(), entry.Value);
}
}
else
{
result = null;
}
return result;
}
/// <summary>
/// Converts an enumeration of string values into a set of Symbol values.
/// </summary>
/// <param name="strings">an enumeration of string values</param>
/// <returns>a set of Symbol value that match the input strings</returns>
public static ISet<Symbol> ToSymbolSet(in IEnumerable<string> strings)
{
ISet<Symbol> result;
if (strings != null)
{
result = new HashSet<Symbol>();
foreach (string value in strings)
{
result.Add(Symbol.Lookup(value));
}
}
else
{
result = null;
}
return result;
}
/// <summary>
/// Converts an enumeration of Symbol values into a set of string values.
/// </summary>
/// <param name="symbols">an enumeration of Symbol values</param>
/// <returns>a set of string value that match the input Symbols</returns>
public static ISet<string> ToStringSet(in IEnumerable<Symbol> symbols)
{
ISet<string> result;
if (symbols != null)
{
result = new HashSet<string>();
foreach (Symbol value in symbols)
{
result.Add(value.ToString());
}
}
else
{
result = null;
}
return result;
}
public static Symbol AsProtonType(this DeliveryStateType mode)
{
return mode switch
{
DeliveryStateType.Accepted => Accepted.DescriptorSymbol,
DeliveryStateType.Rejected => Rejected.DescriptorSymbol,
DeliveryStateType.Modified => Modified.DescriptorSymbol,
DeliveryStateType.Released => Released.DescriptorSymbol,
_ => throw new ArgumentException("Cannot convert unknown delivery state type: " + mode),
};
}
public static Symbol AsProtonType(this DistributionMode mode)
{
return mode switch
{
DistributionMode.Copy => ClientConstants.COPY,
DistributionMode.Move => ClientConstants.MOVE,
DistributionMode.None => null,
_ => throw new ArgumentException("Cannot convert unknown distribution mode: " + mode),
};
}
public static TerminusDurability AsProtonType(this DurabilityMode mode)
{
return mode switch
{
DurabilityMode.Configuration => TerminusDurability.Configuration,
DurabilityMode.None => TerminusDurability.None,
DurabilityMode.UnsettledState => TerminusDurability.UnsettledState,
_ => throw new ArgumentException("Cannot convert unknown durability mode: " + mode),
};
}
public static TerminusExpiryPolicy AsProtonType(this ExpiryPolicy policy)
{
return policy switch
{
ExpiryPolicy.ConnectionClose => TerminusExpiryPolicy.ConnectionClose,
ExpiryPolicy.LinkClose => TerminusExpiryPolicy.LinkDetach,
ExpiryPolicy.Never => TerminusExpiryPolicy.Never,
ExpiryPolicy.SessionClose => TerminusExpiryPolicy.SessionEnd,
_ => throw new ArgumentException("Cannot convert unknown expiry policy: " + policy),
};
}
}
}