// Copyright 2017 Google LLC. All Rights Reserved. // // 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. // gnostic_lint is a tool for analyzing OpenAPI descriptions. // // It scans an API description and checks it against a set of // coding style guidelines. // // Results are returned in a JSON structure. package main import ( "github.com/golang/protobuf/proto" openapiv2 "github.com/googleapis/gnostic/openapiv2" openapiv3 "github.com/googleapis/gnostic/openapiv3" plugins "github.com/googleapis/gnostic/plugins" ) type DocumentLinter interface { Run() []*plugins.Message } // This is the main function for the plugin. func main() { env, err := plugins.NewEnvironment() env.RespondAndExitIfError(err) var linter DocumentLinter for _, model := range env.Request.Models { switch model.TypeUrl { case "openapi.v2.Document": documentv2 := &openapiv2.Document{} err = proto.Unmarshal(model.Value, documentv2) if err == nil { linter = NewDocumentLinterV2(documentv2) env.Response.Messages = linter.Run() } case "openapi.v3.Document": documentv3 := &openapiv3.Document{} err = proto.Unmarshal(model.Value, documentv3) if err == nil { linter = NewDocumentLinterV3(documentv3) env.Response.Messages = linter.Run() } } } env.RespondAndExit() }