package com.google.cloud.pubsublite.internal.wire;

import com.google.cloud.pubsublite.Partition;
import com.google.cloud.pubsublite.SubscriptionPath;
import com.google.cloud.pubsublite.TopicPath;
import io.grpc.Metadata;
import io.grpc.Status;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

final class RoutingMetadata {
  private RoutingMetadata() {}

  static final String PARAMS_HEADER = "x-goog-request-params";
  static final Metadata.Key<String> PARAMS_KEY =
      Metadata.Key.of(PARAMS_HEADER, Metadata.ASCII_STRING_MARSHALLER);

  static Metadata of(TopicPath topic, Partition partition) {
    try {
      Metadata metadata = new Metadata();
      String topic_value = URLEncoder.encode(topic.value(), StandardCharsets.UTF_8.toString());
      String params = String.format("partition=%s&topic=%s", partition.value(), topic_value);
      metadata.put(PARAMS_KEY, params);
      return metadata;
    } catch (UnsupportedEncodingException e) {
      throw Status.INVALID_ARGUMENT.withCause(e).asRuntimeException();
    }
  }

  static Metadata of(SubscriptionPath subscription, Partition partition) {
    try {
      Metadata metadata = new Metadata();
      String subscription_value =
          URLEncoder.encode(subscription.value(), StandardCharsets.UTF_8.toString());
      String params =
          String.format("partition=%s&subscription=%s", partition.value(), subscription_value);
      metadata.put(PARAMS_KEY, params);
      return metadata;
    } catch (UnsupportedEncodingException e) {
      throw Status.INVALID_ARGUMENT.withCause(e).asRuntimeException();
    }
  }
}

@@ -1,8 +1,597 @@
+// Copyright 2020 Google LLC%0A//%0A// Licensed under the Apache License, Version 2.0 (the %22License%22);%0A// you may not use this file except in compliance with the License.%0A// You may obtain a copy of the License at%0A//%0A//      http://www.apache.org/licenses/LICENSE-2.0%0A//%0A// Unless required by applicable law or agreed to in writing, software%0A// distributed under the License is distributed on an %22AS IS%22 BASIS,%0A// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.%0A// See the License for the specific language governing permissions and%0A// limitations under the License.%0A%0A
 package 

Add license header to RoutingMetadata.