blob: ecfdfb03d57e3272818a9da63e9728d58c420b7c [file] [log] [blame]
// Copyright 2020 CUE Authors
//
// 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 build
// A File represents a file that is part of the build process.
type File struct {
Filename string `json:"filename"`
Encoding Encoding `json:"encoding,omitempty"`
Interpretation Interpretation `json:"interpretation,omitempty"`
Form Form `json:"form,omitempty"`
Tags map[string]string `json:"tags,omitempty"` // code=go
Source interface{} `json:"-"` // TODO: swap out with concrete type.
}
// A Encoding indicates a file format for representing a program.
type Encoding string
const (
CUE Encoding = "cue"
JSON Encoding = "json"
YAML Encoding = "yaml"
JSONL Encoding = "jsonl"
Text Encoding = "text"
Protobuf Encoding = "proto"
TextProto Encoding = "textproto"
BinaryProto Encoding = "pb"
// TODO:
// TOML
Code Encoding = "code" // Programming languages
)
// An Interpretation determines how a certain program should be interpreted.
// For instance, data may be interpreted as describing a schema, which itself
// can be converted to a CUE schema.
type Interpretation string
const (
// Auto interprets the underlying data file as data, JSON Schema or OpenAPI,
// depending on the existence of certain marker fields.
//
// JSON Schema is identified by a top-level "$schema" field with a URL
// of the form "https?://json-schema.org/.*schema#?".
//
// OpenAPI is identified by the existence of a top-level field "openapi"
// with a major semantic version of 3, as well as the existence of
// the info.title and info.version fields.
//
// In all other cases, the underlying data is interpreted as is.
Auto Interpretation = "auto"
JSONSchema Interpretation = "jsonschema"
OpenAPI Interpretation = "openapi"
ProtobufJSON Interpretation = "pb"
)
// A Form specifies the form in which a program should be represented.
type Form string
const (
Full Form = "full"
Schema Form = "schema"
Struct Form = "struct"
Final Form = "final" // picking default values, may be non-concrete
Graph Form = "graph" // Data only, but allow references
DAG Form = "dag" // Like graph, but don't allow cycles
Data Form = "data" // always final
)