// <auto-generated>
//     Generated by the protocol buffer compiler.  DO NOT EDIT!
//     source: demo.proto
// </auto-generated>
#pragma warning disable 1591, 0612, 3021
#region Designer generated code

using pb = global::Google.Protobuf;
using pbc = global::Google.Protobuf.Collections;
using pbr = global::Google.Protobuf.Reflection;
using scg = global::System.Collections.Generic;
namespace Hipstershop {

  /// <summary>Holder for reflection information generated from demo.proto</summary>
  public static partial class DemoReflection {

    #region Descriptor
    /// <summary>File descriptor for demo.proto</summary>
    public static pbr::FileDescriptor Descriptor {
      get { return descriptor; }
    }
    private static pbr::FileDescriptor descriptor;

    static DemoReflection() {
      byte[] descriptorData = global::System.Convert.FromBase64String(
          string.Concat(
            "CgpkZW1vLnByb3RvEgtoaXBzdGVyc2hvcCIwCghDYXJ0SXRlbRISCgpwcm9k",
            "dWN0X2lkGAEgASgJEhAKCHF1YW50aXR5GAIgASgFIkYKDkFkZEl0ZW1SZXF1",
            "ZXN0Eg8KB3VzZXJfaWQYASABKAkSIwoEaXRlbRgCIAEoCzIVLmhpcHN0ZXJz",
            "aG9wLkNhcnRJdGVtIiMKEEVtcHR5Q2FydFJlcXVlc3QSDwoHdXNlcl9pZBgB",
            "IAEoCSIhCg5HZXRDYXJ0UmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJIj0KBENh",
            "cnQSDwoHdXNlcl9pZBgBIAEoCRIkCgVpdGVtcxgCIAMoCzIVLmhpcHN0ZXJz",
            "aG9wLkNhcnRJdGVtIgcKBUVtcHR5IkIKGkxpc3RSZWNvbW1lbmRhdGlvbnNS",
            "ZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSEwoLcHJvZHVjdF9pZHMYAiADKAki",
            "MgobTGlzdFJlY29tbWVuZGF0aW9uc1Jlc3BvbnNlEhMKC3Byb2R1Y3RfaWRz",
            "GAEgAygJInYKB1Byb2R1Y3QSCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRIT",
            "CgtkZXNjcmlwdGlvbhgDIAEoCRIPCgdwaWN0dXJlGAQgASgJEisKCXByaWNl",
            "X3VzZBgFIAEoCzIYLmhpcHN0ZXJzaG9wLk1vbmV5QW1vdW50Ij4KFExpc3RQ",
            "cm9kdWN0c1Jlc3BvbnNlEiYKCHByb2R1Y3RzGAEgAygLMhQuaGlwc3RlcnNo",
            "b3AuUHJvZHVjdCIfChFHZXRQcm9kdWN0UmVxdWVzdBIKCgJpZBgBIAEoCSIm",
            "ChVTZWFyY2hQcm9kdWN0c1JlcXVlc3QSDQoFcXVlcnkYASABKAkiPwoWU2Vh",
            "cmNoUHJvZHVjdHNSZXNwb25zZRIlCgdyZXN1bHRzGAEgAygLMhQuaGlwc3Rl",
            "cnNob3AuUHJvZHVjdCJeCg9HZXRRdW90ZVJlcXVlc3QSJQoHYWRkcmVzcxgB",
            "IAEoCzIULmhpcHN0ZXJzaG9wLkFkZHJlc3MSJAoFaXRlbXMYAiADKAsyFS5o",
            "aXBzdGVyc2hvcC5DYXJ0SXRlbSI+ChBHZXRRdW90ZVJlc3BvbnNlEioKCGNv",
            "c3RfdXNkGAEgASgLMhguaGlwc3RlcnNob3AuTW9uZXlBbW91bnQiXwoQU2hp",
            "cE9yZGVyUmVxdWVzdBIlCgdhZGRyZXNzGAEgASgLMhQuaGlwc3RlcnNob3Au",
            "QWRkcmVzcxIkCgVpdGVtcxgCIAMoCzIVLmhpcHN0ZXJzaG9wLkNhcnRJdGVt",
            "IigKEVNoaXBPcmRlclJlc3BvbnNlEhMKC3RyYWNraW5nX2lkGAEgASgJIm4K",
            "B0FkZHJlc3MSGAoQc3RyZWV0X2FkZHJlc3NfMRgBIAEoCRIYChBzdHJlZXRf",
            "YWRkcmVzc18yGAIgASgJEgwKBGNpdHkYAyABKAkSDwoHY291bnRyeRgEIAEo",
            "CRIQCgh6aXBfY29kZRgFIAEoBSIyCgtNb25leUFtb3VudBIPCgdkZWNpbWFs",
            "GAEgASgNEhIKCmZyYWN0aW9uYWwYAiABKA0iSAoFTW9uZXkSFQoNY3VycmVu",
            "Y3lfY29kZRgBIAEoCRIoCgZhbW91bnQYAiABKAsyGC5oaXBzdGVyc2hvcC5N",
            "b25leUFtb3VudCI4Ch5HZXRTdXBwb3J0ZWRDdXJyZW5jaWVzUmVzcG9uc2US",
            "FgoOY3VycmVuY3lfY29kZXMYASADKAkiRgoRQ29udmVyc2lvblJlcXVlc3QS",
            "IAoEZnJvbRgBIAEoCzISLmhpcHN0ZXJzaG9wLk1vbmV5Eg8KB3RvX2NvZGUY",
            "AiABKAkiOAoSQ29udmVyc2lvblJlc3BvbnNlEiIKBnJlc3VsdBgBIAEoCzIS",
            "LmhpcHN0ZXJzaG9wLk1vbmV5IpABCg5DcmVkaXRDYXJkSW5mbxIaChJjcmVk",
            "aXRfY2FyZF9udW1iZXIYASABKAkSFwoPY3JlZGl0X2NhcmRfY3Z2GAIgASgF",
            "EiMKG2NyZWRpdF9jYXJkX2V4cGlyYXRpb25feWVhchgDIAEoBRIkChxjcmVk",
            "aXRfY2FyZF9leHBpcmF0aW9uX21vbnRoGAQgASgFImUKDUNoYXJnZVJlcXVl",
            "c3QSIgoGYW1vdW50GAEgASgLMhIuaGlwc3RlcnNob3AuTW9uZXkSMAoLY3Jl",
            "ZGl0X2NhcmQYAiABKAsyGy5oaXBzdGVyc2hvcC5DcmVkaXRDYXJkSW5mbyIo",
            "Cg5DaGFyZ2VSZXNwb25zZRIWCg50cmFuc2FjdGlvbl9pZBgBIAEoCSJSCglP",
            "cmRlckl0ZW0SIwoEaXRlbRgBIAEoCzIVLmhpcHN0ZXJzaG9wLkNhcnRJdGVt",
            "EiAKBGNvc3QYAiABKAsyEi5oaXBzdGVyc2hvcC5Nb25leSK/AQoLT3JkZXJS",
            "ZXN1bHQSEAoIb3JkZXJfaWQYASABKAkSHAoUc2hpcHBpbmdfdHJhY2tpbmdf",
            "aWQYAiABKAkSKQoNc2hpcHBpbmdfY29zdBgDIAEoCzISLmhpcHN0ZXJzaG9w",
            "Lk1vbmV5Ei4KEHNoaXBwaW5nX2FkZHJlc3MYBCABKAsyFC5oaXBzdGVyc2hv",
            "cC5BZGRyZXNzEiUKBWl0ZW1zGAUgAygLMhYuaGlwc3RlcnNob3AuT3JkZXJJ",
            "dGVtIlYKHFNlbmRPcmRlckNvbmZpcm1hdGlvblJlcXVlc3QSDQoFZW1haWwY",
            "ASABKAkSJwoFb3JkZXIYAiABKAsyGC5oaXBzdGVyc2hvcC5PcmRlclJlc3Vs",
            "dCJjChJDcmVhdGVPcmRlclJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIVCg11",
            "c2VyX2N1cnJlbmN5GAIgASgJEiUKB2FkZHJlc3MYAyABKAsyFC5oaXBzdGVy",
            "c2hvcC5BZGRyZXNzImcKE0NyZWF0ZU9yZGVyUmVzcG9uc2USJQoFaXRlbXMY",
            "ASADKAsyFi5oaXBzdGVyc2hvcC5PcmRlckl0ZW0SKQoNc2hpcHBpbmdfY29z",
            "dBgCIAEoCzISLmhpcHN0ZXJzaG9wLk1vbmV5IqMBChFQbGFjZU9yZGVyUmVx",
            "dWVzdBIPCgd1c2VyX2lkGAEgASgJEhUKDXVzZXJfY3VycmVuY3kYAiABKAkS",
            "JQoHYWRkcmVzcxgDIAEoCzIULmhpcHN0ZXJzaG9wLkFkZHJlc3MSDQoFZW1h",
            "aWwYBSABKAkSMAoLY3JlZGl0X2NhcmQYBiABKAsyGy5oaXBzdGVyc2hvcC5D",
            "cmVkaXRDYXJkSW5mbyI9ChJQbGFjZU9yZGVyUmVzcG9uc2USJwoFb3JkZXIY",
            "ASABKAsyGC5oaXBzdGVyc2hvcC5PcmRlclJlc3VsdDLKAQoLQ2FydFNlcnZp",
            "Y2USPAoHQWRkSXRlbRIbLmhpcHN0ZXJzaG9wLkFkZEl0ZW1SZXF1ZXN0GhIu",
            "aGlwc3RlcnNob3AuRW1wdHkiABI7CgdHZXRDYXJ0EhsuaGlwc3RlcnNob3Au",
            "R2V0Q2FydFJlcXVlc3QaES5oaXBzdGVyc2hvcC5DYXJ0IgASQAoJRW1wdHlD",
            "YXJ0Eh0uaGlwc3RlcnNob3AuRW1wdHlDYXJ0UmVxdWVzdBoSLmhpcHN0ZXJz",
            "aG9wLkVtcHR5IgAygwEKFVJlY29tbWVuZGF0aW9uU2VydmljZRJqChNMaXN0",
            "UmVjb21tZW5kYXRpb25zEicuaGlwc3RlcnNob3AuTGlzdFJlY29tbWVuZGF0",
            "aW9uc1JlcXVlc3QaKC5oaXBzdGVyc2hvcC5MaXN0UmVjb21tZW5kYXRpb25z",
            "UmVzcG9uc2UiADKDAgoVUHJvZHVjdENhdGFsb2dTZXJ2aWNlEkcKDExpc3RQ",
            "cm9kdWN0cxISLmhpcHN0ZXJzaG9wLkVtcHR5GiEuaGlwc3RlcnNob3AuTGlz",
            "dFByb2R1Y3RzUmVzcG9uc2UiABJECgpHZXRQcm9kdWN0Eh4uaGlwc3RlcnNo",
            "b3AuR2V0UHJvZHVjdFJlcXVlc3QaFC5oaXBzdGVyc2hvcC5Qcm9kdWN0IgAS",
            "WwoOU2VhcmNoUHJvZHVjdHMSIi5oaXBzdGVyc2hvcC5TZWFyY2hQcm9kdWN0",
            "c1JlcXVlc3QaIy5oaXBzdGVyc2hvcC5TZWFyY2hQcm9kdWN0c1Jlc3BvbnNl",
            "IgAyqgEKD1NoaXBwaW5nU2VydmljZRJJCghHZXRRdW90ZRIcLmhpcHN0ZXJz",
            "aG9wLkdldFF1b3RlUmVxdWVzdBodLmhpcHN0ZXJzaG9wLkdldFF1b3RlUmVz",
            "cG9uc2UiABJMCglTaGlwT3JkZXISHS5oaXBzdGVyc2hvcC5TaGlwT3JkZXJS",
            "ZXF1ZXN0Gh4uaGlwc3RlcnNob3AuU2hpcE9yZGVyUmVzcG9uc2UiADK8AQoP",
            "Q3VycmVuY3lTZXJ2aWNlElsKFkdldFN1cHBvcnRlZEN1cnJlbmNpZXMSEi5o",
            "aXBzdGVyc2hvcC5FbXB0eRorLmhpcHN0ZXJzaG9wLkdldFN1cHBvcnRlZEN1",
            "cnJlbmNpZXNSZXNwb25zZSIAEkwKB0NvbnZlcnQSHi5oaXBzdGVyc2hvcC5D",
            "b252ZXJzaW9uUmVxdWVzdBofLmhpcHN0ZXJzaG9wLkNvbnZlcnNpb25SZXNw",
            "b25zZSIAMlUKDlBheW1lbnRTZXJ2aWNlEkMKBkNoYXJnZRIaLmhpcHN0ZXJz",
            "aG9wLkNoYXJnZVJlcXVlc3QaGy5oaXBzdGVyc2hvcC5DaGFyZ2VSZXNwb25z",
            "ZSIAMmgKDEVtYWlsU2VydmljZRJYChVTZW5kT3JkZXJDb25maXJtYXRpb24S",
            "KS5oaXBzdGVyc2hvcC5TZW5kT3JkZXJDb25maXJtYXRpb25SZXF1ZXN0GhIu",
            "aGlwc3RlcnNob3AuRW1wdHkiADK2AQoPQ2hlY2tvdXRTZXJ2aWNlElIKC0Ny",
            "ZWF0ZU9yZGVyEh8uaGlwc3RlcnNob3AuQ3JlYXRlT3JkZXJSZXF1ZXN0GiAu",
            "aGlwc3RlcnNob3AuQ3JlYXRlT3JkZXJSZXNwb25zZSIAEk8KClBsYWNlT3Jk",
            "ZXISHi5oaXBzdGVyc2hvcC5QbGFjZU9yZGVyUmVxdWVzdBofLmhpcHN0ZXJz",
            "aG9wLlBsYWNlT3JkZXJSZXNwb25zZSIAYgZwcm90bzM="));
      descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
          new pbr::FileDescriptor[] { },
          new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.CartItem), global::Hipstershop.CartItem.Parser, new[]{ "ProductId", "Quantity" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.AddItemRequest), global::Hipstershop.AddItemRequest.Parser, new[]{ "UserId", "Item" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.EmptyCartRequest), global::Hipstershop.EmptyCartRequest.Parser, new[]{ "UserId" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.GetCartRequest), global::Hipstershop.GetCartRequest.Parser, new[]{ "UserId" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.Cart), global::Hipstershop.Cart.Parser, new[]{ "UserId", "Items" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.Empty), global::Hipstershop.Empty.Parser, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.ListRecommendationsRequest), global::Hipstershop.ListRecommendationsRequest.Parser, new[]{ "UserId", "ProductIds" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.ListRecommendationsResponse), global::Hipstershop.ListRecommendationsResponse.Parser, new[]{ "ProductIds" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.Product), global::Hipstershop.Product.Parser, new[]{ "Id", "Name", "Description", "Picture", "PriceUsd" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.ListProductsResponse), global::Hipstershop.ListProductsResponse.Parser, new[]{ "Products" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.GetProductRequest), global::Hipstershop.GetProductRequest.Parser, new[]{ "Id" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.SearchProductsRequest), global::Hipstershop.SearchProductsRequest.Parser, new[]{ "Query" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.SearchProductsResponse), global::Hipstershop.SearchProductsResponse.Parser, new[]{ "Results" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.GetQuoteRequest), global::Hipstershop.GetQuoteRequest.Parser, new[]{ "Address", "Items" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.GetQuoteResponse), global::Hipstershop.GetQuoteResponse.Parser, new[]{ "CostUsd" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.ShipOrderRequest), global::Hipstershop.ShipOrderRequest.Parser, new[]{ "Address", "Items" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.ShipOrderResponse), global::Hipstershop.ShipOrderResponse.Parser, new[]{ "TrackingId" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.Address), global::Hipstershop.Address.Parser, new[]{ "StreetAddress1", "StreetAddress2", "City", "Country", "ZipCode" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.MoneyAmount), global::Hipstershop.MoneyAmount.Parser, new[]{ "Decimal", "Fractional" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.Money), global::Hipstershop.Money.Parser, new[]{ "CurrencyCode", "Amount" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.GetSupportedCurrenciesResponse), global::Hipstershop.GetSupportedCurrenciesResponse.Parser, new[]{ "CurrencyCodes" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.ConversionRequest), global::Hipstershop.ConversionRequest.Parser, new[]{ "From", "ToCode" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.ConversionResponse), global::Hipstershop.ConversionResponse.Parser, new[]{ "Result" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.CreditCardInfo), global::Hipstershop.CreditCardInfo.Parser, new[]{ "CreditCardNumber", "CreditCardCvv", "CreditCardExpirationYear", "CreditCardExpirationMonth" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.ChargeRequest), global::Hipstershop.ChargeRequest.Parser, new[]{ "Amount", "CreditCard" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.ChargeResponse), global::Hipstershop.ChargeResponse.Parser, new[]{ "TransactionId" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.OrderItem), global::Hipstershop.OrderItem.Parser, new[]{ "Item", "Cost" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.OrderResult), global::Hipstershop.OrderResult.Parser, new[]{ "OrderId", "ShippingTrackingId", "ShippingCost", "ShippingAddress", "Items" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.SendOrderConfirmationRequest), global::Hipstershop.SendOrderConfirmationRequest.Parser, new[]{ "Email", "Order" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.CreateOrderRequest), global::Hipstershop.CreateOrderRequest.Parser, new[]{ "UserId", "UserCurrency", "Address" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.CreateOrderResponse), global::Hipstershop.CreateOrderResponse.Parser, new[]{ "Items", "ShippingCost" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.PlaceOrderRequest), global::Hipstershop.PlaceOrderRequest.Parser, new[]{ "UserId", "UserCurrency", "Address", "Email", "CreditCard" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Hipstershop.PlaceOrderResponse), global::Hipstershop.PlaceOrderResponse.Parser, new[]{ "Order" }, null, null, null)
          }));
    }
    #endregion

  }
  #region Messages
  public sealed partial class CartItem : pb::IMessage<CartItem> {
    private static readonly pb::MessageParser<CartItem> _parser = new pb::MessageParser<CartItem>(() => new CartItem());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<CartItem> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[0]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public CartItem() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public CartItem(CartItem other) : this() {
      productId_ = other.productId_;
      quantity_ = other.quantity_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public CartItem Clone() {
      return new CartItem(this);
    }

    /// <summary>Field number for the "product_id" field.</summary>
    public const int ProductIdFieldNumber = 1;
    private string productId_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string ProductId {
      get { return productId_; }
      set {
        productId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "quantity" field.</summary>
    public const int QuantityFieldNumber = 2;
    private int quantity_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int Quantity {
      get { return quantity_; }
      set {
        quantity_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as CartItem);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(CartItem other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (ProductId != other.ProductId) return false;
      if (Quantity != other.Quantity) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (ProductId.Length != 0) hash ^= ProductId.GetHashCode();
      if (Quantity != 0) hash ^= Quantity.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (ProductId.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(ProductId);
      }
      if (Quantity != 0) {
        output.WriteRawTag(16);
        output.WriteInt32(Quantity);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (ProductId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(ProductId);
      }
      if (Quantity != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Quantity);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(CartItem other) {
      if (other == null) {
        return;
      }
      if (other.ProductId.Length != 0) {
        ProductId = other.ProductId;
      }
      if (other.Quantity != 0) {
        Quantity = other.Quantity;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            ProductId = input.ReadString();
            break;
          }
          case 16: {
            Quantity = input.ReadInt32();
            break;
          }
        }
      }
    }

  }

  public sealed partial class AddItemRequest : pb::IMessage<AddItemRequest> {
    private static readonly pb::MessageParser<AddItemRequest> _parser = new pb::MessageParser<AddItemRequest>(() => new AddItemRequest());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<AddItemRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[1]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public AddItemRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public AddItemRequest(AddItemRequest other) : this() {
      userId_ = other.userId_;
      Item = other.item_ != null ? other.Item.Clone() : null;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public AddItemRequest Clone() {
      return new AddItemRequest(this);
    }

    /// <summary>Field number for the "user_id" field.</summary>
    public const int UserIdFieldNumber = 1;
    private string userId_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string UserId {
      get { return userId_; }
      set {
        userId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "item" field.</summary>
    public const int ItemFieldNumber = 2;
    private global::Hipstershop.CartItem item_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Hipstershop.CartItem Item {
      get { return item_; }
      set {
        item_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as AddItemRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(AddItemRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (UserId != other.UserId) return false;
      if (!object.Equals(Item, other.Item)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (UserId.Length != 0) hash ^= UserId.GetHashCode();
      if (item_ != null) hash ^= Item.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (UserId.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(UserId);
      }
      if (item_ != null) {
        output.WriteRawTag(18);
        output.WriteMessage(Item);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (UserId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(UserId);
      }
      if (item_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Item);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(AddItemRequest other) {
      if (other == null) {
        return;
      }
      if (other.UserId.Length != 0) {
        UserId = other.UserId;
      }
      if (other.item_ != null) {
        if (item_ == null) {
          item_ = new global::Hipstershop.CartItem();
        }
        Item.MergeFrom(other.Item);
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            UserId = input.ReadString();
            break;
          }
          case 18: {
            if (item_ == null) {
              item_ = new global::Hipstershop.CartItem();
            }
            input.ReadMessage(item_);
            break;
          }
        }
      }
    }

  }

  public sealed partial class EmptyCartRequest : pb::IMessage<EmptyCartRequest> {
    private static readonly pb::MessageParser<EmptyCartRequest> _parser = new pb::MessageParser<EmptyCartRequest>(() => new EmptyCartRequest());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<EmptyCartRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[2]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public EmptyCartRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public EmptyCartRequest(EmptyCartRequest other) : this() {
      userId_ = other.userId_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public EmptyCartRequest Clone() {
      return new EmptyCartRequest(this);
    }

    /// <summary>Field number for the "user_id" field.</summary>
    public const int UserIdFieldNumber = 1;
    private string userId_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string UserId {
      get { return userId_; }
      set {
        userId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as EmptyCartRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(EmptyCartRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (UserId != other.UserId) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (UserId.Length != 0) hash ^= UserId.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (UserId.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(UserId);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (UserId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(UserId);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(EmptyCartRequest other) {
      if (other == null) {
        return;
      }
      if (other.UserId.Length != 0) {
        UserId = other.UserId;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            UserId = input.ReadString();
            break;
          }
        }
      }
    }

  }

  public sealed partial class GetCartRequest : pb::IMessage<GetCartRequest> {
    private static readonly pb::MessageParser<GetCartRequest> _parser = new pb::MessageParser<GetCartRequest>(() => new GetCartRequest());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<GetCartRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[3]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GetCartRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GetCartRequest(GetCartRequest other) : this() {
      userId_ = other.userId_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GetCartRequest Clone() {
      return new GetCartRequest(this);
    }

    /// <summary>Field number for the "user_id" field.</summary>
    public const int UserIdFieldNumber = 1;
    private string userId_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string UserId {
      get { return userId_; }
      set {
        userId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as GetCartRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(GetCartRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (UserId != other.UserId) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (UserId.Length != 0) hash ^= UserId.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (UserId.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(UserId);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (UserId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(UserId);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(GetCartRequest other) {
      if (other == null) {
        return;
      }
      if (other.UserId.Length != 0) {
        UserId = other.UserId;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            UserId = input.ReadString();
            break;
          }
        }
      }
    }

  }

  public sealed partial class Cart : pb::IMessage<Cart> {
    private static readonly pb::MessageParser<Cart> _parser = new pb::MessageParser<Cart>(() => new Cart());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<Cart> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[4]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public Cart() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public Cart(Cart other) : this() {
      userId_ = other.userId_;
      items_ = other.items_.Clone();
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public Cart Clone() {
      return new Cart(this);
    }

    /// <summary>Field number for the "user_id" field.</summary>
    public const int UserIdFieldNumber = 1;
    private string userId_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string UserId {
      get { return userId_; }
      set {
        userId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "items" field.</summary>
    public const int ItemsFieldNumber = 2;
    private static readonly pb::FieldCodec<global::Hipstershop.CartItem> _repeated_items_codec
        = pb::FieldCodec.ForMessage(18, global::Hipstershop.CartItem.Parser);
    private readonly pbc::RepeatedField<global::Hipstershop.CartItem> items_ = new pbc::RepeatedField<global::Hipstershop.CartItem>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::Hipstershop.CartItem> Items {
      get { return items_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as Cart);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(Cart other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (UserId != other.UserId) return false;
      if(!items_.Equals(other.items_)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (UserId.Length != 0) hash ^= UserId.GetHashCode();
      hash ^= items_.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (UserId.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(UserId);
      }
      items_.WriteTo(output, _repeated_items_codec);
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (UserId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(UserId);
      }
      size += items_.CalculateSize(_repeated_items_codec);
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(Cart other) {
      if (other == null) {
        return;
      }
      if (other.UserId.Length != 0) {
        UserId = other.UserId;
      }
      items_.Add(other.items_);
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            UserId = input.ReadString();
            break;
          }
          case 18: {
            items_.AddEntriesFrom(input, _repeated_items_codec);
            break;
          }
        }
      }
    }

  }

  public sealed partial class Empty : pb::IMessage<Empty> {
    private static readonly pb::MessageParser<Empty> _parser = new pb::MessageParser<Empty>(() => new Empty());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<Empty> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[5]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public Empty() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public Empty(Empty other) : this() {
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public Empty Clone() {
      return new Empty(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as Empty);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(Empty other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(Empty other) {
      if (other == null) {
        return;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
        }
      }
    }

  }

  public sealed partial class ListRecommendationsRequest : pb::IMessage<ListRecommendationsRequest> {
    private static readonly pb::MessageParser<ListRecommendationsRequest> _parser = new pb::MessageParser<ListRecommendationsRequest>(() => new ListRecommendationsRequest());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<ListRecommendationsRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[6]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ListRecommendationsRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ListRecommendationsRequest(ListRecommendationsRequest other) : this() {
      userId_ = other.userId_;
      productIds_ = other.productIds_.Clone();
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ListRecommendationsRequest Clone() {
      return new ListRecommendationsRequest(this);
    }

    /// <summary>Field number for the "user_id" field.</summary>
    public const int UserIdFieldNumber = 1;
    private string userId_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string UserId {
      get { return userId_; }
      set {
        userId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "product_ids" field.</summary>
    public const int ProductIdsFieldNumber = 2;
    private static readonly pb::FieldCodec<string> _repeated_productIds_codec
        = pb::FieldCodec.ForString(18);
    private readonly pbc::RepeatedField<string> productIds_ = new pbc::RepeatedField<string>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<string> ProductIds {
      get { return productIds_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as ListRecommendationsRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(ListRecommendationsRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (UserId != other.UserId) return false;
      if(!productIds_.Equals(other.productIds_)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (UserId.Length != 0) hash ^= UserId.GetHashCode();
      hash ^= productIds_.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (UserId.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(UserId);
      }
      productIds_.WriteTo(output, _repeated_productIds_codec);
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (UserId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(UserId);
      }
      size += productIds_.CalculateSize(_repeated_productIds_codec);
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(ListRecommendationsRequest other) {
      if (other == null) {
        return;
      }
      if (other.UserId.Length != 0) {
        UserId = other.UserId;
      }
      productIds_.Add(other.productIds_);
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            UserId = input.ReadString();
            break;
          }
          case 18: {
            productIds_.AddEntriesFrom(input, _repeated_productIds_codec);
            break;
          }
        }
      }
    }

  }

  public sealed partial class ListRecommendationsResponse : pb::IMessage<ListRecommendationsResponse> {
    private static readonly pb::MessageParser<ListRecommendationsResponse> _parser = new pb::MessageParser<ListRecommendationsResponse>(() => new ListRecommendationsResponse());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<ListRecommendationsResponse> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[7]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ListRecommendationsResponse() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ListRecommendationsResponse(ListRecommendationsResponse other) : this() {
      productIds_ = other.productIds_.Clone();
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ListRecommendationsResponse Clone() {
      return new ListRecommendationsResponse(this);
    }

    /// <summary>Field number for the "product_ids" field.</summary>
    public const int ProductIdsFieldNumber = 1;
    private static readonly pb::FieldCodec<string> _repeated_productIds_codec
        = pb::FieldCodec.ForString(10);
    private readonly pbc::RepeatedField<string> productIds_ = new pbc::RepeatedField<string>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<string> ProductIds {
      get { return productIds_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as ListRecommendationsResponse);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(ListRecommendationsResponse other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if(!productIds_.Equals(other.productIds_)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= productIds_.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      productIds_.WriteTo(output, _repeated_productIds_codec);
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += productIds_.CalculateSize(_repeated_productIds_codec);
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(ListRecommendationsResponse other) {
      if (other == null) {
        return;
      }
      productIds_.Add(other.productIds_);
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            productIds_.AddEntriesFrom(input, _repeated_productIds_codec);
            break;
          }
        }
      }
    }

  }

  public sealed partial class Product : pb::IMessage<Product> {
    private static readonly pb::MessageParser<Product> _parser = new pb::MessageParser<Product>(() => new Product());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<Product> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[8]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public Product() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public Product(Product other) : this() {
      id_ = other.id_;
      name_ = other.name_;
      description_ = other.description_;
      picture_ = other.picture_;
      PriceUsd = other.priceUsd_ != null ? other.PriceUsd.Clone() : null;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public Product Clone() {
      return new Product(this);
    }

    /// <summary>Field number for the "id" field.</summary>
    public const int IdFieldNumber = 1;
    private string id_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string Id {
      get { return id_; }
      set {
        id_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "name" field.</summary>
    public const int NameFieldNumber = 2;
    private string name_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string Name {
      get { return name_; }
      set {
        name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "description" field.</summary>
    public const int DescriptionFieldNumber = 3;
    private string description_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string Description {
      get { return description_; }
      set {
        description_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "picture" field.</summary>
    public const int PictureFieldNumber = 4;
    private string picture_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string Picture {
      get { return picture_; }
      set {
        picture_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "price_usd" field.</summary>
    public const int PriceUsdFieldNumber = 5;
    private global::Hipstershop.MoneyAmount priceUsd_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Hipstershop.MoneyAmount PriceUsd {
      get { return priceUsd_; }
      set {
        priceUsd_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as Product);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(Product other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Id != other.Id) return false;
      if (Name != other.Name) return false;
      if (Description != other.Description) return false;
      if (Picture != other.Picture) return false;
      if (!object.Equals(PriceUsd, other.PriceUsd)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (Id.Length != 0) hash ^= Id.GetHashCode();
      if (Name.Length != 0) hash ^= Name.GetHashCode();
      if (Description.Length != 0) hash ^= Description.GetHashCode();
      if (Picture.Length != 0) hash ^= Picture.GetHashCode();
      if (priceUsd_ != null) hash ^= PriceUsd.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (Id.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Id);
      }
      if (Name.Length != 0) {
        output.WriteRawTag(18);
        output.WriteString(Name);
      }
      if (Description.Length != 0) {
        output.WriteRawTag(26);
        output.WriteString(Description);
      }
      if (Picture.Length != 0) {
        output.WriteRawTag(34);
        output.WriteString(Picture);
      }
      if (priceUsd_ != null) {
        output.WriteRawTag(42);
        output.WriteMessage(PriceUsd);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (Id.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Id);
      }
      if (Name.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
      }
      if (Description.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Description);
      }
      if (Picture.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Picture);
      }
      if (priceUsd_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(PriceUsd);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(Product other) {
      if (other == null) {
        return;
      }
      if (other.Id.Length != 0) {
        Id = other.Id;
      }
      if (other.Name.Length != 0) {
        Name = other.Name;
      }
      if (other.Description.Length != 0) {
        Description = other.Description;
      }
      if (other.Picture.Length != 0) {
        Picture = other.Picture;
      }
      if (other.priceUsd_ != null) {
        if (priceUsd_ == null) {
          priceUsd_ = new global::Hipstershop.MoneyAmount();
        }
        PriceUsd.MergeFrom(other.PriceUsd);
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            Id = input.ReadString();
            break;
          }
          case 18: {
            Name = input.ReadString();
            break;
          }
          case 26: {
            Description = input.ReadString();
            break;
          }
          case 34: {
            Picture = input.ReadString();
            break;
          }
          case 42: {
            if (priceUsd_ == null) {
              priceUsd_ = new global::Hipstershop.MoneyAmount();
            }
            input.ReadMessage(priceUsd_);
            break;
          }
        }
      }
    }

  }

  public sealed partial class ListProductsResponse : pb::IMessage<ListProductsResponse> {
    private static readonly pb::MessageParser<ListProductsResponse> _parser = new pb::MessageParser<ListProductsResponse>(() => new ListProductsResponse());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<ListProductsResponse> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[9]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ListProductsResponse() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ListProductsResponse(ListProductsResponse other) : this() {
      products_ = other.products_.Clone();
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ListProductsResponse Clone() {
      return new ListProductsResponse(this);
    }

    /// <summary>Field number for the "products" field.</summary>
    public const int ProductsFieldNumber = 1;
    private static readonly pb::FieldCodec<global::Hipstershop.Product> _repeated_products_codec
        = pb::FieldCodec.ForMessage(10, global::Hipstershop.Product.Parser);
    private readonly pbc::RepeatedField<global::Hipstershop.Product> products_ = new pbc::RepeatedField<global::Hipstershop.Product>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::Hipstershop.Product> Products {
      get { return products_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as ListProductsResponse);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(ListProductsResponse other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if(!products_.Equals(other.products_)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= products_.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      products_.WriteTo(output, _repeated_products_codec);
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += products_.CalculateSize(_repeated_products_codec);
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(ListProductsResponse other) {
      if (other == null) {
        return;
      }
      products_.Add(other.products_);
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            products_.AddEntriesFrom(input, _repeated_products_codec);
            break;
          }
        }
      }
    }

  }

  public sealed partial class GetProductRequest : pb::IMessage<GetProductRequest> {
    private static readonly pb::MessageParser<GetProductRequest> _parser = new pb::MessageParser<GetProductRequest>(() => new GetProductRequest());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<GetProductRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[10]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GetProductRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GetProductRequest(GetProductRequest other) : this() {
      id_ = other.id_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GetProductRequest Clone() {
      return new GetProductRequest(this);
    }

    /// <summary>Field number for the "id" field.</summary>
    public const int IdFieldNumber = 1;
    private string id_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string Id {
      get { return id_; }
      set {
        id_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as GetProductRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(GetProductRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Id != other.Id) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (Id.Length != 0) hash ^= Id.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (Id.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Id);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (Id.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Id);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(GetProductRequest other) {
      if (other == null) {
        return;
      }
      if (other.Id.Length != 0) {
        Id = other.Id;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            Id = input.ReadString();
            break;
          }
        }
      }
    }

  }

  public sealed partial class SearchProductsRequest : pb::IMessage<SearchProductsRequest> {
    private static readonly pb::MessageParser<SearchProductsRequest> _parser = new pb::MessageParser<SearchProductsRequest>(() => new SearchProductsRequest());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<SearchProductsRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[11]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SearchProductsRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SearchProductsRequest(SearchProductsRequest other) : this() {
      query_ = other.query_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SearchProductsRequest Clone() {
      return new SearchProductsRequest(this);
    }

    /// <summary>Field number for the "query" field.</summary>
    public const int QueryFieldNumber = 1;
    private string query_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string Query {
      get { return query_; }
      set {
        query_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as SearchProductsRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(SearchProductsRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Query != other.Query) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (Query.Length != 0) hash ^= Query.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (Query.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Query);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (Query.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Query);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(SearchProductsRequest other) {
      if (other == null) {
        return;
      }
      if (other.Query.Length != 0) {
        Query = other.Query;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            Query = input.ReadString();
            break;
          }
        }
      }
    }

  }

  public sealed partial class SearchProductsResponse : pb::IMessage<SearchProductsResponse> {
    private static readonly pb::MessageParser<SearchProductsResponse> _parser = new pb::MessageParser<SearchProductsResponse>(() => new SearchProductsResponse());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<SearchProductsResponse> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[12]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SearchProductsResponse() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SearchProductsResponse(SearchProductsResponse other) : this() {
      results_ = other.results_.Clone();
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SearchProductsResponse Clone() {
      return new SearchProductsResponse(this);
    }

    /// <summary>Field number for the "results" field.</summary>
    public const int ResultsFieldNumber = 1;
    private static readonly pb::FieldCodec<global::Hipstershop.Product> _repeated_results_codec
        = pb::FieldCodec.ForMessage(10, global::Hipstershop.Product.Parser);
    private readonly pbc::RepeatedField<global::Hipstershop.Product> results_ = new pbc::RepeatedField<global::Hipstershop.Product>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::Hipstershop.Product> Results {
      get { return results_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as SearchProductsResponse);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(SearchProductsResponse other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if(!results_.Equals(other.results_)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= results_.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      results_.WriteTo(output, _repeated_results_codec);
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += results_.CalculateSize(_repeated_results_codec);
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(SearchProductsResponse other) {
      if (other == null) {
        return;
      }
      results_.Add(other.results_);
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            results_.AddEntriesFrom(input, _repeated_results_codec);
            break;
          }
        }
      }
    }

  }

  public sealed partial class GetQuoteRequest : pb::IMessage<GetQuoteRequest> {
    private static readonly pb::MessageParser<GetQuoteRequest> _parser = new pb::MessageParser<GetQuoteRequest>(() => new GetQuoteRequest());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<GetQuoteRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[13]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GetQuoteRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GetQuoteRequest(GetQuoteRequest other) : this() {
      Address = other.address_ != null ? other.Address.Clone() : null;
      items_ = other.items_.Clone();
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GetQuoteRequest Clone() {
      return new GetQuoteRequest(this);
    }

    /// <summary>Field number for the "address" field.</summary>
    public const int AddressFieldNumber = 1;
    private global::Hipstershop.Address address_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Hipstershop.Address Address {
      get { return address_; }
      set {
        address_ = value;
      }
    }

    /// <summary>Field number for the "items" field.</summary>
    public const int ItemsFieldNumber = 2;
    private static readonly pb::FieldCodec<global::Hipstershop.CartItem> _repeated_items_codec
        = pb::FieldCodec.ForMessage(18, global::Hipstershop.CartItem.Parser);
    private readonly pbc::RepeatedField<global::Hipstershop.CartItem> items_ = new pbc::RepeatedField<global::Hipstershop.CartItem>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::Hipstershop.CartItem> Items {
      get { return items_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as GetQuoteRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(GetQuoteRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(Address, other.Address)) return false;
      if(!items_.Equals(other.items_)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (address_ != null) hash ^= Address.GetHashCode();
      hash ^= items_.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (address_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(Address);
      }
      items_.WriteTo(output, _repeated_items_codec);
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (address_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Address);
      }
      size += items_.CalculateSize(_repeated_items_codec);
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(GetQuoteRequest other) {
      if (other == null) {
        return;
      }
      if (other.address_ != null) {
        if (address_ == null) {
          address_ = new global::Hipstershop.Address();
        }
        Address.MergeFrom(other.Address);
      }
      items_.Add(other.items_);
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            if (address_ == null) {
              address_ = new global::Hipstershop.Address();
            }
            input.ReadMessage(address_);
            break;
          }
          case 18: {
            items_.AddEntriesFrom(input, _repeated_items_codec);
            break;
          }
        }
      }
    }

  }

  public sealed partial class GetQuoteResponse : pb::IMessage<GetQuoteResponse> {
    private static readonly pb::MessageParser<GetQuoteResponse> _parser = new pb::MessageParser<GetQuoteResponse>(() => new GetQuoteResponse());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<GetQuoteResponse> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[14]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GetQuoteResponse() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GetQuoteResponse(GetQuoteResponse other) : this() {
      CostUsd = other.costUsd_ != null ? other.CostUsd.Clone() : null;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GetQuoteResponse Clone() {
      return new GetQuoteResponse(this);
    }

    /// <summary>Field number for the "cost_usd" field.</summary>
    public const int CostUsdFieldNumber = 1;
    private global::Hipstershop.MoneyAmount costUsd_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Hipstershop.MoneyAmount CostUsd {
      get { return costUsd_; }
      set {
        costUsd_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as GetQuoteResponse);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(GetQuoteResponse other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(CostUsd, other.CostUsd)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (costUsd_ != null) hash ^= CostUsd.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (costUsd_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(CostUsd);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (costUsd_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(CostUsd);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(GetQuoteResponse other) {
      if (other == null) {
        return;
      }
      if (other.costUsd_ != null) {
        if (costUsd_ == null) {
          costUsd_ = new global::Hipstershop.MoneyAmount();
        }
        CostUsd.MergeFrom(other.CostUsd);
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            if (costUsd_ == null) {
              costUsd_ = new global::Hipstershop.MoneyAmount();
            }
            input.ReadMessage(costUsd_);
            break;
          }
        }
      }
    }

  }

  public sealed partial class ShipOrderRequest : pb::IMessage<ShipOrderRequest> {
    private static readonly pb::MessageParser<ShipOrderRequest> _parser = new pb::MessageParser<ShipOrderRequest>(() => new ShipOrderRequest());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<ShipOrderRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[15]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ShipOrderRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ShipOrderRequest(ShipOrderRequest other) : this() {
      Address = other.address_ != null ? other.Address.Clone() : null;
      items_ = other.items_.Clone();
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ShipOrderRequest Clone() {
      return new ShipOrderRequest(this);
    }

    /// <summary>Field number for the "address" field.</summary>
    public const int AddressFieldNumber = 1;
    private global::Hipstershop.Address address_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Hipstershop.Address Address {
      get { return address_; }
      set {
        address_ = value;
      }
    }

    /// <summary>Field number for the "items" field.</summary>
    public const int ItemsFieldNumber = 2;
    private static readonly pb::FieldCodec<global::Hipstershop.CartItem> _repeated_items_codec
        = pb::FieldCodec.ForMessage(18, global::Hipstershop.CartItem.Parser);
    private readonly pbc::RepeatedField<global::Hipstershop.CartItem> items_ = new pbc::RepeatedField<global::Hipstershop.CartItem>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::Hipstershop.CartItem> Items {
      get { return items_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as ShipOrderRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(ShipOrderRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(Address, other.Address)) return false;
      if(!items_.Equals(other.items_)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (address_ != null) hash ^= Address.GetHashCode();
      hash ^= items_.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (address_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(Address);
      }
      items_.WriteTo(output, _repeated_items_codec);
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (address_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Address);
      }
      size += items_.CalculateSize(_repeated_items_codec);
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(ShipOrderRequest other) {
      if (other == null) {
        return;
      }
      if (other.address_ != null) {
        if (address_ == null) {
          address_ = new global::Hipstershop.Address();
        }
        Address.MergeFrom(other.Address);
      }
      items_.Add(other.items_);
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            if (address_ == null) {
              address_ = new global::Hipstershop.Address();
            }
            input.ReadMessage(address_);
            break;
          }
          case 18: {
            items_.AddEntriesFrom(input, _repeated_items_codec);
            break;
          }
        }
      }
    }

  }

  public sealed partial class ShipOrderResponse : pb::IMessage<ShipOrderResponse> {
    private static readonly pb::MessageParser<ShipOrderResponse> _parser = new pb::MessageParser<ShipOrderResponse>(() => new ShipOrderResponse());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<ShipOrderResponse> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[16]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ShipOrderResponse() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ShipOrderResponse(ShipOrderResponse other) : this() {
      trackingId_ = other.trackingId_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ShipOrderResponse Clone() {
      return new ShipOrderResponse(this);
    }

    /// <summary>Field number for the "tracking_id" field.</summary>
    public const int TrackingIdFieldNumber = 1;
    private string trackingId_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string TrackingId {
      get { return trackingId_; }
      set {
        trackingId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as ShipOrderResponse);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(ShipOrderResponse other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (TrackingId != other.TrackingId) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (TrackingId.Length != 0) hash ^= TrackingId.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (TrackingId.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(TrackingId);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (TrackingId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(TrackingId);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(ShipOrderResponse other) {
      if (other == null) {
        return;
      }
      if (other.TrackingId.Length != 0) {
        TrackingId = other.TrackingId;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            TrackingId = input.ReadString();
            break;
          }
        }
      }
    }

  }

  public sealed partial class Address : pb::IMessage<Address> {
    private static readonly pb::MessageParser<Address> _parser = new pb::MessageParser<Address>(() => new Address());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<Address> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[17]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public Address() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public Address(Address other) : this() {
      streetAddress1_ = other.streetAddress1_;
      streetAddress2_ = other.streetAddress2_;
      city_ = other.city_;
      country_ = other.country_;
      zipCode_ = other.zipCode_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public Address Clone() {
      return new Address(this);
    }

    /// <summary>Field number for the "street_address_1" field.</summary>
    public const int StreetAddress1FieldNumber = 1;
    private string streetAddress1_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string StreetAddress1 {
      get { return streetAddress1_; }
      set {
        streetAddress1_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "street_address_2" field.</summary>
    public const int StreetAddress2FieldNumber = 2;
    private string streetAddress2_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string StreetAddress2 {
      get { return streetAddress2_; }
      set {
        streetAddress2_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "city" field.</summary>
    public const int CityFieldNumber = 3;
    private string city_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string City {
      get { return city_; }
      set {
        city_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "country" field.</summary>
    public const int CountryFieldNumber = 4;
    private string country_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string Country {
      get { return country_; }
      set {
        country_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "zip_code" field.</summary>
    public const int ZipCodeFieldNumber = 5;
    private int zipCode_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int ZipCode {
      get { return zipCode_; }
      set {
        zipCode_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as Address);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(Address other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (StreetAddress1 != other.StreetAddress1) return false;
      if (StreetAddress2 != other.StreetAddress2) return false;
      if (City != other.City) return false;
      if (Country != other.Country) return false;
      if (ZipCode != other.ZipCode) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (StreetAddress1.Length != 0) hash ^= StreetAddress1.GetHashCode();
      if (StreetAddress2.Length != 0) hash ^= StreetAddress2.GetHashCode();
      if (City.Length != 0) hash ^= City.GetHashCode();
      if (Country.Length != 0) hash ^= Country.GetHashCode();
      if (ZipCode != 0) hash ^= ZipCode.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (StreetAddress1.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(StreetAddress1);
      }
      if (StreetAddress2.Length != 0) {
        output.WriteRawTag(18);
        output.WriteString(StreetAddress2);
      }
      if (City.Length != 0) {
        output.WriteRawTag(26);
        output.WriteString(City);
      }
      if (Country.Length != 0) {
        output.WriteRawTag(34);
        output.WriteString(Country);
      }
      if (ZipCode != 0) {
        output.WriteRawTag(40);
        output.WriteInt32(ZipCode);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (StreetAddress1.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(StreetAddress1);
      }
      if (StreetAddress2.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(StreetAddress2);
      }
      if (City.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(City);
      }
      if (Country.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Country);
      }
      if (ZipCode != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(ZipCode);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(Address other) {
      if (other == null) {
        return;
      }
      if (other.StreetAddress1.Length != 0) {
        StreetAddress1 = other.StreetAddress1;
      }
      if (other.StreetAddress2.Length != 0) {
        StreetAddress2 = other.StreetAddress2;
      }
      if (other.City.Length != 0) {
        City = other.City;
      }
      if (other.Country.Length != 0) {
        Country = other.Country;
      }
      if (other.ZipCode != 0) {
        ZipCode = other.ZipCode;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            StreetAddress1 = input.ReadString();
            break;
          }
          case 18: {
            StreetAddress2 = input.ReadString();
            break;
          }
          case 26: {
            City = input.ReadString();
            break;
          }
          case 34: {
            Country = input.ReadString();
            break;
          }
          case 40: {
            ZipCode = input.ReadInt32();
            break;
          }
        }
      }
    }

  }

  /// <summary>
  /// Describes a money amount without currency. For example, decimal=2 and
  /// fractional=500 (or fractional=5) makes up 2.5 units.
  /// </summary>
  public sealed partial class MoneyAmount : pb::IMessage<MoneyAmount> {
    private static readonly pb::MessageParser<MoneyAmount> _parser = new pb::MessageParser<MoneyAmount>(() => new MoneyAmount());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<MoneyAmount> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[18]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MoneyAmount() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MoneyAmount(MoneyAmount other) : this() {
      decimal_ = other.decimal_;
      fractional_ = other.fractional_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public MoneyAmount Clone() {
      return new MoneyAmount(this);
    }

    /// <summary>Field number for the "decimal" field.</summary>
    public const int DecimalFieldNumber = 1;
    private uint decimal_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint Decimal {
      get { return decimal_; }
      set {
        decimal_ = value;
      }
    }

    /// <summary>Field number for the "fractional" field.</summary>
    public const int FractionalFieldNumber = 2;
    private uint fractional_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public uint Fractional {
      get { return fractional_; }
      set {
        fractional_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as MoneyAmount);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(MoneyAmount other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Decimal != other.Decimal) return false;
      if (Fractional != other.Fractional) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (Decimal != 0) hash ^= Decimal.GetHashCode();
      if (Fractional != 0) hash ^= Fractional.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (Decimal != 0) {
        output.WriteRawTag(8);
        output.WriteUInt32(Decimal);
      }
      if (Fractional != 0) {
        output.WriteRawTag(16);
        output.WriteUInt32(Fractional);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (Decimal != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(Decimal);
      }
      if (Fractional != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(Fractional);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(MoneyAmount other) {
      if (other == null) {
        return;
      }
      if (other.Decimal != 0) {
        Decimal = other.Decimal;
      }
      if (other.Fractional != 0) {
        Fractional = other.Fractional;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 8: {
            Decimal = input.ReadUInt32();
            break;
          }
          case 16: {
            Fractional = input.ReadUInt32();
            break;
          }
        }
      }
    }

  }

  public sealed partial class Money : pb::IMessage<Money> {
    private static readonly pb::MessageParser<Money> _parser = new pb::MessageParser<Money>(() => new Money());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<Money> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[19]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public Money() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public Money(Money other) : this() {
      currencyCode_ = other.currencyCode_;
      Amount = other.amount_ != null ? other.Amount.Clone() : null;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public Money Clone() {
      return new Money(this);
    }

    /// <summary>Field number for the "currency_code" field.</summary>
    public const int CurrencyCodeFieldNumber = 1;
    private string currencyCode_ = "";
    /// <summary>
    /// The 3-letter currency code defined in ISO 4217.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string CurrencyCode {
      get { return currencyCode_; }
      set {
        currencyCode_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "amount" field.</summary>
    public const int AmountFieldNumber = 2;
    private global::Hipstershop.MoneyAmount amount_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Hipstershop.MoneyAmount Amount {
      get { return amount_; }
      set {
        amount_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as Money);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(Money other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (CurrencyCode != other.CurrencyCode) return false;
      if (!object.Equals(Amount, other.Amount)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (CurrencyCode.Length != 0) hash ^= CurrencyCode.GetHashCode();
      if (amount_ != null) hash ^= Amount.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (CurrencyCode.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(CurrencyCode);
      }
      if (amount_ != null) {
        output.WriteRawTag(18);
        output.WriteMessage(Amount);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (CurrencyCode.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(CurrencyCode);
      }
      if (amount_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Amount);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(Money other) {
      if (other == null) {
        return;
      }
      if (other.CurrencyCode.Length != 0) {
        CurrencyCode = other.CurrencyCode;
      }
      if (other.amount_ != null) {
        if (amount_ == null) {
          amount_ = new global::Hipstershop.MoneyAmount();
        }
        Amount.MergeFrom(other.Amount);
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            CurrencyCode = input.ReadString();
            break;
          }
          case 18: {
            if (amount_ == null) {
              amount_ = new global::Hipstershop.MoneyAmount();
            }
            input.ReadMessage(amount_);
            break;
          }
        }
      }
    }

  }

  public sealed partial class GetSupportedCurrenciesResponse : pb::IMessage<GetSupportedCurrenciesResponse> {
    private static readonly pb::MessageParser<GetSupportedCurrenciesResponse> _parser = new pb::MessageParser<GetSupportedCurrenciesResponse>(() => new GetSupportedCurrenciesResponse());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<GetSupportedCurrenciesResponse> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[20]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GetSupportedCurrenciesResponse() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GetSupportedCurrenciesResponse(GetSupportedCurrenciesResponse other) : this() {
      currencyCodes_ = other.currencyCodes_.Clone();
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public GetSupportedCurrenciesResponse Clone() {
      return new GetSupportedCurrenciesResponse(this);
    }

    /// <summary>Field number for the "currency_codes" field.</summary>
    public const int CurrencyCodesFieldNumber = 1;
    private static readonly pb::FieldCodec<string> _repeated_currencyCodes_codec
        = pb::FieldCodec.ForString(10);
    private readonly pbc::RepeatedField<string> currencyCodes_ = new pbc::RepeatedField<string>();
    /// <summary>
    /// The 3-letter currency code defined in ISO 4217.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<string> CurrencyCodes {
      get { return currencyCodes_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as GetSupportedCurrenciesResponse);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(GetSupportedCurrenciesResponse other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if(!currencyCodes_.Equals(other.currencyCodes_)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= currencyCodes_.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      currencyCodes_.WriteTo(output, _repeated_currencyCodes_codec);
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += currencyCodes_.CalculateSize(_repeated_currencyCodes_codec);
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(GetSupportedCurrenciesResponse other) {
      if (other == null) {
        return;
      }
      currencyCodes_.Add(other.currencyCodes_);
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            currencyCodes_.AddEntriesFrom(input, _repeated_currencyCodes_codec);
            break;
          }
        }
      }
    }

  }

  public sealed partial class ConversionRequest : pb::IMessage<ConversionRequest> {
    private static readonly pb::MessageParser<ConversionRequest> _parser = new pb::MessageParser<ConversionRequest>(() => new ConversionRequest());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<ConversionRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[21]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ConversionRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ConversionRequest(ConversionRequest other) : this() {
      From = other.from_ != null ? other.From.Clone() : null;
      toCode_ = other.toCode_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ConversionRequest Clone() {
      return new ConversionRequest(this);
    }

    /// <summary>Field number for the "from" field.</summary>
    public const int FromFieldNumber = 1;
    private global::Hipstershop.Money from_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Hipstershop.Money From {
      get { return from_; }
      set {
        from_ = value;
      }
    }

    /// <summary>Field number for the "to_code" field.</summary>
    public const int ToCodeFieldNumber = 2;
    private string toCode_ = "";
    /// <summary>
    /// The 3-letter currency code defined in ISO 4217.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string ToCode {
      get { return toCode_; }
      set {
        toCode_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as ConversionRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(ConversionRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(From, other.From)) return false;
      if (ToCode != other.ToCode) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (from_ != null) hash ^= From.GetHashCode();
      if (ToCode.Length != 0) hash ^= ToCode.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (from_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(From);
      }
      if (ToCode.Length != 0) {
        output.WriteRawTag(18);
        output.WriteString(ToCode);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (from_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(From);
      }
      if (ToCode.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(ToCode);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(ConversionRequest other) {
      if (other == null) {
        return;
      }
      if (other.from_ != null) {
        if (from_ == null) {
          from_ = new global::Hipstershop.Money();
        }
        From.MergeFrom(other.From);
      }
      if (other.ToCode.Length != 0) {
        ToCode = other.ToCode;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            if (from_ == null) {
              from_ = new global::Hipstershop.Money();
            }
            input.ReadMessage(from_);
            break;
          }
          case 18: {
            ToCode = input.ReadString();
            break;
          }
        }
      }
    }

  }

  public sealed partial class ConversionResponse : pb::IMessage<ConversionResponse> {
    private static readonly pb::MessageParser<ConversionResponse> _parser = new pb::MessageParser<ConversionResponse>(() => new ConversionResponse());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<ConversionResponse> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[22]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ConversionResponse() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ConversionResponse(ConversionResponse other) : this() {
      Result = other.result_ != null ? other.Result.Clone() : null;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ConversionResponse Clone() {
      return new ConversionResponse(this);
    }

    /// <summary>Field number for the "result" field.</summary>
    public const int ResultFieldNumber = 1;
    private global::Hipstershop.Money result_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Hipstershop.Money Result {
      get { return result_; }
      set {
        result_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as ConversionResponse);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(ConversionResponse other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(Result, other.Result)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (result_ != null) hash ^= Result.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (result_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(Result);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (result_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Result);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(ConversionResponse other) {
      if (other == null) {
        return;
      }
      if (other.result_ != null) {
        if (result_ == null) {
          result_ = new global::Hipstershop.Money();
        }
        Result.MergeFrom(other.Result);
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            if (result_ == null) {
              result_ = new global::Hipstershop.Money();
            }
            input.ReadMessage(result_);
            break;
          }
        }
      }
    }

  }

  public sealed partial class CreditCardInfo : pb::IMessage<CreditCardInfo> {
    private static readonly pb::MessageParser<CreditCardInfo> _parser = new pb::MessageParser<CreditCardInfo>(() => new CreditCardInfo());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<CreditCardInfo> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[23]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public CreditCardInfo() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public CreditCardInfo(CreditCardInfo other) : this() {
      creditCardNumber_ = other.creditCardNumber_;
      creditCardCvv_ = other.creditCardCvv_;
      creditCardExpirationYear_ = other.creditCardExpirationYear_;
      creditCardExpirationMonth_ = other.creditCardExpirationMonth_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public CreditCardInfo Clone() {
      return new CreditCardInfo(this);
    }

    /// <summary>Field number for the "credit_card_number" field.</summary>
    public const int CreditCardNumberFieldNumber = 1;
    private string creditCardNumber_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string CreditCardNumber {
      get { return creditCardNumber_; }
      set {
        creditCardNumber_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "credit_card_cvv" field.</summary>
    public const int CreditCardCvvFieldNumber = 2;
    private int creditCardCvv_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CreditCardCvv {
      get { return creditCardCvv_; }
      set {
        creditCardCvv_ = value;
      }
    }

    /// <summary>Field number for the "credit_card_expiration_year" field.</summary>
    public const int CreditCardExpirationYearFieldNumber = 3;
    private int creditCardExpirationYear_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CreditCardExpirationYear {
      get { return creditCardExpirationYear_; }
      set {
        creditCardExpirationYear_ = value;
      }
    }

    /// <summary>Field number for the "credit_card_expiration_month" field.</summary>
    public const int CreditCardExpirationMonthFieldNumber = 4;
    private int creditCardExpirationMonth_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CreditCardExpirationMonth {
      get { return creditCardExpirationMonth_; }
      set {
        creditCardExpirationMonth_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as CreditCardInfo);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(CreditCardInfo other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (CreditCardNumber != other.CreditCardNumber) return false;
      if (CreditCardCvv != other.CreditCardCvv) return false;
      if (CreditCardExpirationYear != other.CreditCardExpirationYear) return false;
      if (CreditCardExpirationMonth != other.CreditCardExpirationMonth) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (CreditCardNumber.Length != 0) hash ^= CreditCardNumber.GetHashCode();
      if (CreditCardCvv != 0) hash ^= CreditCardCvv.GetHashCode();
      if (CreditCardExpirationYear != 0) hash ^= CreditCardExpirationYear.GetHashCode();
      if (CreditCardExpirationMonth != 0) hash ^= CreditCardExpirationMonth.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (CreditCardNumber.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(CreditCardNumber);
      }
      if (CreditCardCvv != 0) {
        output.WriteRawTag(16);
        output.WriteInt32(CreditCardCvv);
      }
      if (CreditCardExpirationYear != 0) {
        output.WriteRawTag(24);
        output.WriteInt32(CreditCardExpirationYear);
      }
      if (CreditCardExpirationMonth != 0) {
        output.WriteRawTag(32);
        output.WriteInt32(CreditCardExpirationMonth);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (CreditCardNumber.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(CreditCardNumber);
      }
      if (CreditCardCvv != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(CreditCardCvv);
      }
      if (CreditCardExpirationYear != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(CreditCardExpirationYear);
      }
      if (CreditCardExpirationMonth != 0) {
        size += 1 + pb::CodedOutputStream.ComputeInt32Size(CreditCardExpirationMonth);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(CreditCardInfo other) {
      if (other == null) {
        return;
      }
      if (other.CreditCardNumber.Length != 0) {
        CreditCardNumber = other.CreditCardNumber;
      }
      if (other.CreditCardCvv != 0) {
        CreditCardCvv = other.CreditCardCvv;
      }
      if (other.CreditCardExpirationYear != 0) {
        CreditCardExpirationYear = other.CreditCardExpirationYear;
      }
      if (other.CreditCardExpirationMonth != 0) {
        CreditCardExpirationMonth = other.CreditCardExpirationMonth;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            CreditCardNumber = input.ReadString();
            break;
          }
          case 16: {
            CreditCardCvv = input.ReadInt32();
            break;
          }
          case 24: {
            CreditCardExpirationYear = input.ReadInt32();
            break;
          }
          case 32: {
            CreditCardExpirationMonth = input.ReadInt32();
            break;
          }
        }
      }
    }

  }

  public sealed partial class ChargeRequest : pb::IMessage<ChargeRequest> {
    private static readonly pb::MessageParser<ChargeRequest> _parser = new pb::MessageParser<ChargeRequest>(() => new ChargeRequest());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<ChargeRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[24]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeRequest(ChargeRequest other) : this() {
      Amount = other.amount_ != null ? other.Amount.Clone() : null;
      CreditCard = other.creditCard_ != null ? other.CreditCard.Clone() : null;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeRequest Clone() {
      return new ChargeRequest(this);
    }

    /// <summary>Field number for the "amount" field.</summary>
    public const int AmountFieldNumber = 1;
    private global::Hipstershop.Money amount_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Hipstershop.Money Amount {
      get { return amount_; }
      set {
        amount_ = value;
      }
    }

    /// <summary>Field number for the "credit_card" field.</summary>
    public const int CreditCardFieldNumber = 2;
    private global::Hipstershop.CreditCardInfo creditCard_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Hipstershop.CreditCardInfo CreditCard {
      get { return creditCard_; }
      set {
        creditCard_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as ChargeRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(ChargeRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(Amount, other.Amount)) return false;
      if (!object.Equals(CreditCard, other.CreditCard)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (amount_ != null) hash ^= Amount.GetHashCode();
      if (creditCard_ != null) hash ^= CreditCard.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (amount_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(Amount);
      }
      if (creditCard_ != null) {
        output.WriteRawTag(18);
        output.WriteMessage(CreditCard);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (amount_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Amount);
      }
      if (creditCard_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(CreditCard);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(ChargeRequest other) {
      if (other == null) {
        return;
      }
      if (other.amount_ != null) {
        if (amount_ == null) {
          amount_ = new global::Hipstershop.Money();
        }
        Amount.MergeFrom(other.Amount);
      }
      if (other.creditCard_ != null) {
        if (creditCard_ == null) {
          creditCard_ = new global::Hipstershop.CreditCardInfo();
        }
        CreditCard.MergeFrom(other.CreditCard);
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            if (amount_ == null) {
              amount_ = new global::Hipstershop.Money();
            }
            input.ReadMessage(amount_);
            break;
          }
          case 18: {
            if (creditCard_ == null) {
              creditCard_ = new global::Hipstershop.CreditCardInfo();
            }
            input.ReadMessage(creditCard_);
            break;
          }
        }
      }
    }

  }

  public sealed partial class ChargeResponse : pb::IMessage<ChargeResponse> {
    private static readonly pb::MessageParser<ChargeResponse> _parser = new pb::MessageParser<ChargeResponse>(() => new ChargeResponse());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<ChargeResponse> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[25]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeResponse() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeResponse(ChargeResponse other) : this() {
      transactionId_ = other.transactionId_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public ChargeResponse Clone() {
      return new ChargeResponse(this);
    }

    /// <summary>Field number for the "transaction_id" field.</summary>
    public const int TransactionIdFieldNumber = 1;
    private string transactionId_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string TransactionId {
      get { return transactionId_; }
      set {
        transactionId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as ChargeResponse);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(ChargeResponse other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (TransactionId != other.TransactionId) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (TransactionId.Length != 0) hash ^= TransactionId.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (TransactionId.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(TransactionId);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (TransactionId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(TransactionId);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(ChargeResponse other) {
      if (other == null) {
        return;
      }
      if (other.TransactionId.Length != 0) {
        TransactionId = other.TransactionId;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            TransactionId = input.ReadString();
            break;
          }
        }
      }
    }

  }

  public sealed partial class OrderItem : pb::IMessage<OrderItem> {
    private static readonly pb::MessageParser<OrderItem> _parser = new pb::MessageParser<OrderItem>(() => new OrderItem());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<OrderItem> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[26]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public OrderItem() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public OrderItem(OrderItem other) : this() {
      Item = other.item_ != null ? other.Item.Clone() : null;
      Cost = other.cost_ != null ? other.Cost.Clone() : null;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public OrderItem Clone() {
      return new OrderItem(this);
    }

    /// <summary>Field number for the "item" field.</summary>
    public const int ItemFieldNumber = 1;
    private global::Hipstershop.CartItem item_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Hipstershop.CartItem Item {
      get { return item_; }
      set {
        item_ = value;
      }
    }

    /// <summary>Field number for the "cost" field.</summary>
    public const int CostFieldNumber = 2;
    private global::Hipstershop.Money cost_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Hipstershop.Money Cost {
      get { return cost_; }
      set {
        cost_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as OrderItem);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(OrderItem other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(Item, other.Item)) return false;
      if (!object.Equals(Cost, other.Cost)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (item_ != null) hash ^= Item.GetHashCode();
      if (cost_ != null) hash ^= Cost.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (item_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(Item);
      }
      if (cost_ != null) {
        output.WriteRawTag(18);
        output.WriteMessage(Cost);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (item_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Item);
      }
      if (cost_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Cost);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(OrderItem other) {
      if (other == null) {
        return;
      }
      if (other.item_ != null) {
        if (item_ == null) {
          item_ = new global::Hipstershop.CartItem();
        }
        Item.MergeFrom(other.Item);
      }
      if (other.cost_ != null) {
        if (cost_ == null) {
          cost_ = new global::Hipstershop.Money();
        }
        Cost.MergeFrom(other.Cost);
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            if (item_ == null) {
              item_ = new global::Hipstershop.CartItem();
            }
            input.ReadMessage(item_);
            break;
          }
          case 18: {
            if (cost_ == null) {
              cost_ = new global::Hipstershop.Money();
            }
            input.ReadMessage(cost_);
            break;
          }
        }
      }
    }

  }

  public sealed partial class OrderResult : pb::IMessage<OrderResult> {
    private static readonly pb::MessageParser<OrderResult> _parser = new pb::MessageParser<OrderResult>(() => new OrderResult());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<OrderResult> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[27]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public OrderResult() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public OrderResult(OrderResult other) : this() {
      orderId_ = other.orderId_;
      shippingTrackingId_ = other.shippingTrackingId_;
      ShippingCost = other.shippingCost_ != null ? other.ShippingCost.Clone() : null;
      ShippingAddress = other.shippingAddress_ != null ? other.ShippingAddress.Clone() : null;
      items_ = other.items_.Clone();
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public OrderResult Clone() {
      return new OrderResult(this);
    }

    /// <summary>Field number for the "order_id" field.</summary>
    public const int OrderIdFieldNumber = 1;
    private string orderId_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string OrderId {
      get { return orderId_; }
      set {
        orderId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "shipping_tracking_id" field.</summary>
    public const int ShippingTrackingIdFieldNumber = 2;
    private string shippingTrackingId_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string ShippingTrackingId {
      get { return shippingTrackingId_; }
      set {
        shippingTrackingId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "shipping_cost" field.</summary>
    public const int ShippingCostFieldNumber = 3;
    private global::Hipstershop.Money shippingCost_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Hipstershop.Money ShippingCost {
      get { return shippingCost_; }
      set {
        shippingCost_ = value;
      }
    }

    /// <summary>Field number for the "shipping_address" field.</summary>
    public const int ShippingAddressFieldNumber = 4;
    private global::Hipstershop.Address shippingAddress_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Hipstershop.Address ShippingAddress {
      get { return shippingAddress_; }
      set {
        shippingAddress_ = value;
      }
    }

    /// <summary>Field number for the "items" field.</summary>
    public const int ItemsFieldNumber = 5;
    private static readonly pb::FieldCodec<global::Hipstershop.OrderItem> _repeated_items_codec
        = pb::FieldCodec.ForMessage(42, global::Hipstershop.OrderItem.Parser);
    private readonly pbc::RepeatedField<global::Hipstershop.OrderItem> items_ = new pbc::RepeatedField<global::Hipstershop.OrderItem>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::Hipstershop.OrderItem> Items {
      get { return items_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as OrderResult);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(OrderResult other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (OrderId != other.OrderId) return false;
      if (ShippingTrackingId != other.ShippingTrackingId) return false;
      if (!object.Equals(ShippingCost, other.ShippingCost)) return false;
      if (!object.Equals(ShippingAddress, other.ShippingAddress)) return false;
      if(!items_.Equals(other.items_)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (OrderId.Length != 0) hash ^= OrderId.GetHashCode();
      if (ShippingTrackingId.Length != 0) hash ^= ShippingTrackingId.GetHashCode();
      if (shippingCost_ != null) hash ^= ShippingCost.GetHashCode();
      if (shippingAddress_ != null) hash ^= ShippingAddress.GetHashCode();
      hash ^= items_.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (OrderId.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(OrderId);
      }
      if (ShippingTrackingId.Length != 0) {
        output.WriteRawTag(18);
        output.WriteString(ShippingTrackingId);
      }
      if (shippingCost_ != null) {
        output.WriteRawTag(26);
        output.WriteMessage(ShippingCost);
      }
      if (shippingAddress_ != null) {
        output.WriteRawTag(34);
        output.WriteMessage(ShippingAddress);
      }
      items_.WriteTo(output, _repeated_items_codec);
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (OrderId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(OrderId);
      }
      if (ShippingTrackingId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(ShippingTrackingId);
      }
      if (shippingCost_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(ShippingCost);
      }
      if (shippingAddress_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(ShippingAddress);
      }
      size += items_.CalculateSize(_repeated_items_codec);
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(OrderResult other) {
      if (other == null) {
        return;
      }
      if (other.OrderId.Length != 0) {
        OrderId = other.OrderId;
      }
      if (other.ShippingTrackingId.Length != 0) {
        ShippingTrackingId = other.ShippingTrackingId;
      }
      if (other.shippingCost_ != null) {
        if (shippingCost_ == null) {
          shippingCost_ = new global::Hipstershop.Money();
        }
        ShippingCost.MergeFrom(other.ShippingCost);
      }
      if (other.shippingAddress_ != null) {
        if (shippingAddress_ == null) {
          shippingAddress_ = new global::Hipstershop.Address();
        }
        ShippingAddress.MergeFrom(other.ShippingAddress);
      }
      items_.Add(other.items_);
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            OrderId = input.ReadString();
            break;
          }
          case 18: {
            ShippingTrackingId = input.ReadString();
            break;
          }
          case 26: {
            if (shippingCost_ == null) {
              shippingCost_ = new global::Hipstershop.Money();
            }
            input.ReadMessage(shippingCost_);
            break;
          }
          case 34: {
            if (shippingAddress_ == null) {
              shippingAddress_ = new global::Hipstershop.Address();
            }
            input.ReadMessage(shippingAddress_);
            break;
          }
          case 42: {
            items_.AddEntriesFrom(input, _repeated_items_codec);
            break;
          }
        }
      }
    }

  }

  public sealed partial class SendOrderConfirmationRequest : pb::IMessage<SendOrderConfirmationRequest> {
    private static readonly pb::MessageParser<SendOrderConfirmationRequest> _parser = new pb::MessageParser<SendOrderConfirmationRequest>(() => new SendOrderConfirmationRequest());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<SendOrderConfirmationRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[28]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SendOrderConfirmationRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SendOrderConfirmationRequest(SendOrderConfirmationRequest other) : this() {
      email_ = other.email_;
      Order = other.order_ != null ? other.Order.Clone() : null;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public SendOrderConfirmationRequest Clone() {
      return new SendOrderConfirmationRequest(this);
    }

    /// <summary>Field number for the "email" field.</summary>
    public const int EmailFieldNumber = 1;
    private string email_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string Email {
      get { return email_; }
      set {
        email_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "order" field.</summary>
    public const int OrderFieldNumber = 2;
    private global::Hipstershop.OrderResult order_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Hipstershop.OrderResult Order {
      get { return order_; }
      set {
        order_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as SendOrderConfirmationRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(SendOrderConfirmationRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Email != other.Email) return false;
      if (!object.Equals(Order, other.Order)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (Email.Length != 0) hash ^= Email.GetHashCode();
      if (order_ != null) hash ^= Order.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (Email.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Email);
      }
      if (order_ != null) {
        output.WriteRawTag(18);
        output.WriteMessage(Order);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (Email.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Email);
      }
      if (order_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Order);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(SendOrderConfirmationRequest other) {
      if (other == null) {
        return;
      }
      if (other.Email.Length != 0) {
        Email = other.Email;
      }
      if (other.order_ != null) {
        if (order_ == null) {
          order_ = new global::Hipstershop.OrderResult();
        }
        Order.MergeFrom(other.Order);
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            Email = input.ReadString();
            break;
          }
          case 18: {
            if (order_ == null) {
              order_ = new global::Hipstershop.OrderResult();
            }
            input.ReadMessage(order_);
            break;
          }
        }
      }
    }

  }

  public sealed partial class CreateOrderRequest : pb::IMessage<CreateOrderRequest> {
    private static readonly pb::MessageParser<CreateOrderRequest> _parser = new pb::MessageParser<CreateOrderRequest>(() => new CreateOrderRequest());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<CreateOrderRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[29]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public CreateOrderRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public CreateOrderRequest(CreateOrderRequest other) : this() {
      userId_ = other.userId_;
      userCurrency_ = other.userCurrency_;
      Address = other.address_ != null ? other.Address.Clone() : null;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public CreateOrderRequest Clone() {
      return new CreateOrderRequest(this);
    }

    /// <summary>Field number for the "user_id" field.</summary>
    public const int UserIdFieldNumber = 1;
    private string userId_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string UserId {
      get { return userId_; }
      set {
        userId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "user_currency" field.</summary>
    public const int UserCurrencyFieldNumber = 2;
    private string userCurrency_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string UserCurrency {
      get { return userCurrency_; }
      set {
        userCurrency_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "address" field.</summary>
    public const int AddressFieldNumber = 3;
    private global::Hipstershop.Address address_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Hipstershop.Address Address {
      get { return address_; }
      set {
        address_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as CreateOrderRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(CreateOrderRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (UserId != other.UserId) return false;
      if (UserCurrency != other.UserCurrency) return false;
      if (!object.Equals(Address, other.Address)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (UserId.Length != 0) hash ^= UserId.GetHashCode();
      if (UserCurrency.Length != 0) hash ^= UserCurrency.GetHashCode();
      if (address_ != null) hash ^= Address.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (UserId.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(UserId);
      }
      if (UserCurrency.Length != 0) {
        output.WriteRawTag(18);
        output.WriteString(UserCurrency);
      }
      if (address_ != null) {
        output.WriteRawTag(26);
        output.WriteMessage(Address);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (UserId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(UserId);
      }
      if (UserCurrency.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(UserCurrency);
      }
      if (address_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Address);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(CreateOrderRequest other) {
      if (other == null) {
        return;
      }
      if (other.UserId.Length != 0) {
        UserId = other.UserId;
      }
      if (other.UserCurrency.Length != 0) {
        UserCurrency = other.UserCurrency;
      }
      if (other.address_ != null) {
        if (address_ == null) {
          address_ = new global::Hipstershop.Address();
        }
        Address.MergeFrom(other.Address);
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            UserId = input.ReadString();
            break;
          }
          case 18: {
            UserCurrency = input.ReadString();
            break;
          }
          case 26: {
            if (address_ == null) {
              address_ = new global::Hipstershop.Address();
            }
            input.ReadMessage(address_);
            break;
          }
        }
      }
    }

  }

  public sealed partial class CreateOrderResponse : pb::IMessage<CreateOrderResponse> {
    private static readonly pb::MessageParser<CreateOrderResponse> _parser = new pb::MessageParser<CreateOrderResponse>(() => new CreateOrderResponse());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<CreateOrderResponse> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[30]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public CreateOrderResponse() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public CreateOrderResponse(CreateOrderResponse other) : this() {
      items_ = other.items_.Clone();
      ShippingCost = other.shippingCost_ != null ? other.ShippingCost.Clone() : null;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public CreateOrderResponse Clone() {
      return new CreateOrderResponse(this);
    }

    /// <summary>Field number for the "items" field.</summary>
    public const int ItemsFieldNumber = 1;
    private static readonly pb::FieldCodec<global::Hipstershop.OrderItem> _repeated_items_codec
        = pb::FieldCodec.ForMessage(10, global::Hipstershop.OrderItem.Parser);
    private readonly pbc::RepeatedField<global::Hipstershop.OrderItem> items_ = new pbc::RepeatedField<global::Hipstershop.OrderItem>();
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public pbc::RepeatedField<global::Hipstershop.OrderItem> Items {
      get { return items_; }
    }

    /// <summary>Field number for the "shipping_cost" field.</summary>
    public const int ShippingCostFieldNumber = 2;
    private global::Hipstershop.Money shippingCost_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Hipstershop.Money ShippingCost {
      get { return shippingCost_; }
      set {
        shippingCost_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as CreateOrderResponse);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(CreateOrderResponse other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if(!items_.Equals(other.items_)) return false;
      if (!object.Equals(ShippingCost, other.ShippingCost)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      hash ^= items_.GetHashCode();
      if (shippingCost_ != null) hash ^= ShippingCost.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      items_.WriteTo(output, _repeated_items_codec);
      if (shippingCost_ != null) {
        output.WriteRawTag(18);
        output.WriteMessage(ShippingCost);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      size += items_.CalculateSize(_repeated_items_codec);
      if (shippingCost_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(ShippingCost);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(CreateOrderResponse other) {
      if (other == null) {
        return;
      }
      items_.Add(other.items_);
      if (other.shippingCost_ != null) {
        if (shippingCost_ == null) {
          shippingCost_ = new global::Hipstershop.Money();
        }
        ShippingCost.MergeFrom(other.ShippingCost);
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            items_.AddEntriesFrom(input, _repeated_items_codec);
            break;
          }
          case 18: {
            if (shippingCost_ == null) {
              shippingCost_ = new global::Hipstershop.Money();
            }
            input.ReadMessage(shippingCost_);
            break;
          }
        }
      }
    }

  }

  public sealed partial class PlaceOrderRequest : pb::IMessage<PlaceOrderRequest> {
    private static readonly pb::MessageParser<PlaceOrderRequest> _parser = new pb::MessageParser<PlaceOrderRequest>(() => new PlaceOrderRequest());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<PlaceOrderRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[31]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public PlaceOrderRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public PlaceOrderRequest(PlaceOrderRequest other) : this() {
      userId_ = other.userId_;
      userCurrency_ = other.userCurrency_;
      Address = other.address_ != null ? other.Address.Clone() : null;
      email_ = other.email_;
      CreditCard = other.creditCard_ != null ? other.CreditCard.Clone() : null;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public PlaceOrderRequest Clone() {
      return new PlaceOrderRequest(this);
    }

    /// <summary>Field number for the "user_id" field.</summary>
    public const int UserIdFieldNumber = 1;
    private string userId_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string UserId {
      get { return userId_; }
      set {
        userId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "user_currency" field.</summary>
    public const int UserCurrencyFieldNumber = 2;
    private string userCurrency_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string UserCurrency {
      get { return userCurrency_; }
      set {
        userCurrency_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "address" field.</summary>
    public const int AddressFieldNumber = 3;
    private global::Hipstershop.Address address_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Hipstershop.Address Address {
      get { return address_; }
      set {
        address_ = value;
      }
    }

    /// <summary>Field number for the "email" field.</summary>
    public const int EmailFieldNumber = 5;
    private string email_ = "";
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public string Email {
      get { return email_; }
      set {
        email_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "credit_card" field.</summary>
    public const int CreditCardFieldNumber = 6;
    private global::Hipstershop.CreditCardInfo creditCard_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Hipstershop.CreditCardInfo CreditCard {
      get { return creditCard_; }
      set {
        creditCard_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as PlaceOrderRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(PlaceOrderRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (UserId != other.UserId) return false;
      if (UserCurrency != other.UserCurrency) return false;
      if (!object.Equals(Address, other.Address)) return false;
      if (Email != other.Email) return false;
      if (!object.Equals(CreditCard, other.CreditCard)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (UserId.Length != 0) hash ^= UserId.GetHashCode();
      if (UserCurrency.Length != 0) hash ^= UserCurrency.GetHashCode();
      if (address_ != null) hash ^= Address.GetHashCode();
      if (Email.Length != 0) hash ^= Email.GetHashCode();
      if (creditCard_ != null) hash ^= CreditCard.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (UserId.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(UserId);
      }
      if (UserCurrency.Length != 0) {
        output.WriteRawTag(18);
        output.WriteString(UserCurrency);
      }
      if (address_ != null) {
        output.WriteRawTag(26);
        output.WriteMessage(Address);
      }
      if (Email.Length != 0) {
        output.WriteRawTag(42);
        output.WriteString(Email);
      }
      if (creditCard_ != null) {
        output.WriteRawTag(50);
        output.WriteMessage(CreditCard);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (UserId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(UserId);
      }
      if (UserCurrency.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(UserCurrency);
      }
      if (address_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Address);
      }
      if (Email.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Email);
      }
      if (creditCard_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(CreditCard);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(PlaceOrderRequest other) {
      if (other == null) {
        return;
      }
      if (other.UserId.Length != 0) {
        UserId = other.UserId;
      }
      if (other.UserCurrency.Length != 0) {
        UserCurrency = other.UserCurrency;
      }
      if (other.address_ != null) {
        if (address_ == null) {
          address_ = new global::Hipstershop.Address();
        }
        Address.MergeFrom(other.Address);
      }
      if (other.Email.Length != 0) {
        Email = other.Email;
      }
      if (other.creditCard_ != null) {
        if (creditCard_ == null) {
          creditCard_ = new global::Hipstershop.CreditCardInfo();
        }
        CreditCard.MergeFrom(other.CreditCard);
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            UserId = input.ReadString();
            break;
          }
          case 18: {
            UserCurrency = input.ReadString();
            break;
          }
          case 26: {
            if (address_ == null) {
              address_ = new global::Hipstershop.Address();
            }
            input.ReadMessage(address_);
            break;
          }
          case 42: {
            Email = input.ReadString();
            break;
          }
          case 50: {
            if (creditCard_ == null) {
              creditCard_ = new global::Hipstershop.CreditCardInfo();
            }
            input.ReadMessage(creditCard_);
            break;
          }
        }
      }
    }

  }

  public sealed partial class PlaceOrderResponse : pb::IMessage<PlaceOrderResponse> {
    private static readonly pb::MessageParser<PlaceOrderResponse> _parser = new pb::MessageParser<PlaceOrderResponse>(() => new PlaceOrderResponse());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pb::MessageParser<PlaceOrderResponse> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Hipstershop.DemoReflection.Descriptor.MessageTypes[32]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public PlaceOrderResponse() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public PlaceOrderResponse(PlaceOrderResponse other) : this() {
      Order = other.order_ != null ? other.Order.Clone() : null;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public PlaceOrderResponse Clone() {
      return new PlaceOrderResponse(this);
    }

    /// <summary>Field number for the "order" field.</summary>
    public const int OrderFieldNumber = 1;
    private global::Hipstershop.OrderResult order_;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public global::Hipstershop.OrderResult Order {
      get { return order_; }
      set {
        order_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override bool Equals(object other) {
      return Equals(other as PlaceOrderResponse);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public bool Equals(PlaceOrderResponse other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(Order, other.Order)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override int GetHashCode() {
      int hash = 1;
      if (order_ != null) hash ^= Order.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void WriteTo(pb::CodedOutputStream output) {
      if (order_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(Order);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public int CalculateSize() {
      int size = 0;
      if (order_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Order);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(PlaceOrderResponse other) {
      if (other == null) {
        return;
      }
      if (other.order_ != null) {
        if (order_ == null) {
          order_ = new global::Hipstershop.OrderResult();
        }
        Order.MergeFrom(other.Order);
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    public void MergeFrom(pb::CodedInputStream input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            if (order_ == null) {
              order_ = new global::Hipstershop.OrderResult();
            }
            input.ReadMessage(order_);
            break;
          }
        }
      }
    }

  }

  #endregion

}

#endregion Designer generated code
