go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/swarming/server/cfg/validation.go (about) 1 // Copyright 2023 The LUCI Authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package cfg 16 17 import ( 18 "google.golang.org/protobuf/encoding/prototext" 19 "google.golang.org/protobuf/proto" 20 21 "go.chromium.org/luci/config/validation" 22 ) 23 24 func init() { 25 addProtoValidator("settings.cfg", validateSettingsCfg) 26 addProtoValidator("pools.cfg", validatePoolsCfg) 27 addProtoValidator("bots.cfg", validateBotsCfg) 28 } 29 30 // addProtoValidator registers a validator for text proto service configs. 31 func addProtoValidator[T any, TP interface { 32 *T 33 proto.Message 34 }](path string, cb func(ctx *validation.Context, t *T)) { 35 validation.Rules.Add("services/${appid}", path, 36 func(ctx *validation.Context, _, path string, content []byte) error { 37 ctx.SetFile(path) 38 var msg TP = new(T) 39 if err := prototext.Unmarshal(content, msg); err != nil { 40 ctx.Error(err) 41 } else { 42 cb(ctx, msg) 43 } 44 return nil 45 }, 46 ) 47 }