using Google.Protobuf;
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;

#if NET35
using systemAlias = global::KRPC.Client.Compatibility;
using genericCollectionsAlias = global::KRPC.Client.Compatibility;
#else
using systemAlias = global::System;
using genericCollectionsAlias = global::System.Collections.Generic;
#endif

// Generated code references its own deprecated members (e.g. when registering
// exception types), so suppress the deprecation warnings within this file.
#pragma warning disable 612, 618

namespace KRPC.Client.Services.EmptyService
{
    /// <summary>
    /// Extension methods for EmptyService service.
    /// </summary>
    public static class ExtensionMethods
    {
        /// <summary>
        /// Create an instance of the EmptyService service.
        /// </summary>
        public static global::KRPC.Client.Services.EmptyService.Service EmptyService (this global::KRPC.Client.IConnection connection)
        {
            return new global::KRPC.Client.Services.EmptyService.Service (connection);
        }
    }

    // The types the stubs encode and decode values of, built once each. A spec names the
    // positions inside a value that can hold null, which a C# type cannot always say.
    static class TypeSpecs
    {
        // The procedures whose values a C# type cannot describe on its own, which a call
        // built from an expression looks up by name
        static readonly global::System.Collections.Generic.Dictionary<string, global::KRPC.Client.TypeSpec> returnSpecs =
            new global::System.Collections.Generic.Dictionary<string, global::KRPC.Client.TypeSpec> {
            };

        static readonly global::System.Collections.Generic.Dictionary<string, global::KRPC.Client.TypeSpec[]> parameterSpecs =
            new global::System.Collections.Generic.Dictionary<string, global::KRPC.Client.TypeSpec[]> {
            };

        public static global::KRPC.Client.TypeSpec ReturnSpec (string procedure)
        {
            global::KRPC.Client.TypeSpec spec;
            return returnSpecs.TryGetValue (procedure, out spec) ? spec : null;
        }

        public static global::KRPC.Client.TypeSpec[] ParameterSpecs (string procedure)
        {
            global::KRPC.Client.TypeSpec[] specs;
            return parameterSpecs.TryGetValue (procedure, out specs) ? specs : null;
        }
    }

    /// <summary>
    /// EmptyService service.
    /// </summary>
    public class Service
    {
        internal Service (global::KRPC.Client.IConnection serverConnection)
        {
        }
    }
}
