1*b7c941bbSAndroid Build Coastguard Worker// Copyright (C) 2024 The Android Open Source Project 2*b7c941bbSAndroid Build Coastguard Worker// 3*b7c941bbSAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*b7c941bbSAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*b7c941bbSAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*b7c941bbSAndroid Build Coastguard Worker// 7*b7c941bbSAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*b7c941bbSAndroid Build Coastguard Worker// 9*b7c941bbSAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*b7c941bbSAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*b7c941bbSAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*b7c941bbSAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*b7c941bbSAndroid Build Coastguard Worker// limitations under the License. 14*b7c941bbSAndroid Build Coastguard Worker 15*b7c941bbSAndroid Build Coastguard Worker// Package requirements generates src using templates and Media Performance Class (MPC) 16*b7c941bbSAndroid Build Coastguard Worker// requirements data. 17*b7c941bbSAndroid Build Coastguard Workerpackage requirements 18*b7c941bbSAndroid Build Coastguard Worker 19*b7c941bbSAndroid Build Coastguard Workerimport ( 20*b7c941bbSAndroid Build Coastguard Worker "io" 21*b7c941bbSAndroid Build Coastguard Worker "text/template" 22*b7c941bbSAndroid Build Coastguard Worker 23*b7c941bbSAndroid Build Coastguard Worker "cts/test/mediapc/requirements/templatefns" 24*b7c941bbSAndroid Build Coastguard Worker "google.golang.org/protobuf/proto" 25*b7c941bbSAndroid Build Coastguard Worker 26*b7c941bbSAndroid Build Coastguard Worker pb "cts/test/mediapc/requirements/requirements_go_proto" 27*b7c941bbSAndroid Build Coastguard Worker) 28*b7c941bbSAndroid Build Coastguard Worker 29*b7c941bbSAndroid Build Coastguard Worker// Gensrc generates source from a template using a list of MPC requirements. 30*b7c941bbSAndroid Build Coastguard Workerfunc Gensrc(tmplString string, reqList *pb.RequirementList, w io.Writer) error { 31*b7c941bbSAndroid Build Coastguard Worker type Top struct { 32*b7c941bbSAndroid Build Coastguard Worker ReqList *pb.RequirementList 33*b7c941bbSAndroid Build Coastguard Worker } 34*b7c941bbSAndroid Build Coastguard Worker top := Top{ReqList: reqList} 35*b7c941bbSAndroid Build Coastguard Worker tmpl, err := template.New("gensrc").Funcs(templatefns.Funcs()).Parse(tmplString) 36*b7c941bbSAndroid Build Coastguard Worker if err != nil { 37*b7c941bbSAndroid Build Coastguard Worker return err 38*b7c941bbSAndroid Build Coastguard Worker } 39*b7c941bbSAndroid Build Coastguard Worker err = tmpl.Execute(w, top) 40*b7c941bbSAndroid Build Coastguard Worker if err != nil { 41*b7c941bbSAndroid Build Coastguard Worker return err 42*b7c941bbSAndroid Build Coastguard Worker } 43*b7c941bbSAndroid Build Coastguard Worker return nil 44*b7c941bbSAndroid Build Coastguard Worker} 45*b7c941bbSAndroid Build Coastguard Worker 46*b7c941bbSAndroid Build Coastguard Worker// UnmarshalRequirementList unmarshals MPC requirements data. 47*b7c941bbSAndroid Build Coastguard Workerfunc UnmarshalRequirementList(reqBinary []byte) (*pb.RequirementList, error) { 48*b7c941bbSAndroid Build Coastguard Worker req := &pb.RequirementList{} 49*b7c941bbSAndroid Build Coastguard Worker err := proto.Unmarshal(reqBinary, req) 50*b7c941bbSAndroid Build Coastguard Worker return req, err 51*b7c941bbSAndroid Build Coastguard Worker} 52