All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.squareup.wire.schema.internal.parser.ProtoFileElement.kt Maven / Gradle / Ivy

There is a newer version: 5.1.0
Show newest version
/*
 * Copyright (C) 2013 Square, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.squareup.wire.schema.internal.parser

import com.squareup.wire.schema.Location
import com.squareup.wire.schema.ProtoFile

/** A single `.proto` file.  */
data class ProtoFileElement(
  val location: Location,
  val packageName: String? = null,
  val syntax: ProtoFile.Syntax? = null,
  val imports: List = emptyList(),
  val publicImports: List = emptyList(),
  val types: List = emptyList(),
  val services: List = emptyList(),
  val extendDeclarations: List = emptyList(),
  val options: List = emptyList()
) {
  fun toSchema() = buildString {
    append("// ")
    append(location)
    append('\n')

    if (syntax != null) {
       append("syntax = \"$syntax\";\n")
    }
    if (packageName != null) {
       append("package $packageName;\n")
    }
    if (imports.isNotEmpty() || publicImports.isNotEmpty()) {
      append('\n')
      for (file in imports) {
        append("import \"$file\";\n")
      }
      for (file in publicImports) {
        append("import public \"$file\";\n")
      }
    }
    if (options.isNotEmpty()) {
      append('\n')
      for (option in options) {
        append(option.toSchemaDeclaration())
      }
    }
    if (types.isNotEmpty()) {
      append('\n')
      for (typeElement in types) {
        append(typeElement.toSchema())
      }
    }
    if (extendDeclarations.isNotEmpty()) {
      append('\n')
      for (extendDeclaration in extendDeclarations) {
        append(extendDeclaration.toSchema())
      }
    }
    if (services.isNotEmpty()) {
      append('\n')
      for (service in services) {
        append(service.toSchema())
      }
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy