// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

library service_util;

import 'package:protoc_plugin/src/descriptor.pb.dart';

ServiceDescriptorProto buildServiceDescriptor() {
  ServiceDescriptorProto sd = ServiceDescriptorProto()
    ..name = 'Test'
    ..method.addAll([
      MethodDescriptorProto()
        ..name = 'AMethod'
        ..inputType = '.testpkg.SomeRequest'
        ..outputType = '.testpkg.SomeReply',
      MethodDescriptorProto()
        ..name = 'AnotherMethod'
        ..inputType = '.foo.bar.EmptyMessage'
        ..outputType = '.foo.bar.AnotherReply',
    ]);
  return sd;
}

FileDescriptorProto buildFileDescriptor(
    String package, String fileUri, List<String> messages) {
  var fd = FileDescriptorProto()
    ..package = package
    ..name = fileUri;
  for (var name in messages) {
    var md = DescriptorProto()..name = name;

    fd.messageType.add(md);
  }
  return fd;
}
