/
servlamo
/
cue
Обзор
Документация
Войти
/
servlamo
/
cue
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
internal/encoding/detect.go
67 строк
2 KB
Daniel Martí
internal/encoding: resolve all deprecation warnings
22 апр 2024, 12:28
22 апр 2024, 12:28
6f8cbb0
Код
Авторство
О чём код?
// 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 encoding import ( "net/url" "path" "strings" "cuelang.org/go/cue" "cuelang.org/go/cue/build" ) // Detect detects the interpretation. func Detect(v cue.Value) (i build.Interpretation) { switch { case isOpenAPI(v): return build.OpenAPI case isJSONSchema(v): return build.JSONSchema } return i } func isOpenAPI(v cue.Value) bool { s, _ := v.LookupPath(cue.MakePath(cue.Str("openapi"))).String() if !strings.HasPrefix(s, "3.") { return false } if _, err := v.LookupPath(cue.MakePath(cue.Str("info"), cue.Str("title"))).String(); err != nil { return false } if _, err := v.LookupPath(cue.MakePath(cue.Str("info"), cue.Str("version"))).String(); err != nil { return false } return true } func isJSONSchema(v cue.Value) bool { s, err := v.LookupPath(cue.MakePath(cue.Str("$schema"))).String() if err != nil { return false } u, err := url.Parse(s) if err != nil { return false } if u.Hostname() != "json-schema.org" { return false } if _, base := path.Split(u.EscapedPath()); base != "schema" { return false } return true }