/
dimamir
/
rill
Обзор
Документация
Войти
/
dimamir
/
rill
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
runtime/api.go
49 строк
1 KB
Benjamin Egelund-Müller
Runtime: built in APIs for arbitrary SQL and metrics SQL (#4335)
13 мар 2024, 14:15
Не верифицирован
13 мар 2024, 14:15
552e69f
Код
Авторство
О чём код?
package runtime import ( "context" runtimev1 "github.com/rilldata/rill/proto/gen/rill/runtime/v1" "google.golang.org/protobuf/types/known/structpb" ) // BuiltinAPIs is a map of built-in APIs (i.e. predefined APIs that are not created dynamically from a project's YAML files.) var BuiltinAPIs = map[string]*runtimev1.API{} // RegisterBuiltinAPI adds a built-in API with the given name that invokes the given resolver and resolver properties. func RegisterBuiltinAPI(name, resolver string, resolverProps map[string]any) { props, err := structpb.NewStruct(resolverProps) if err != nil { panic(err) } api := &runtimev1.API{ Spec: &runtimev1.APISpec{ Resolver: resolver, ResolverProperties: props, }, State: &runtimev1.APIState{}, } BuiltinAPIs[name] = api } // APIForName returns the API with the given name for the given instance. // It gives precedence to built-in APIs over project-specific dynamically created APIs. func (r *Runtime) APIForName(ctx context.Context, instanceID, name string) (*runtimev1.API, error) { if api, ok := BuiltinAPIs[name]; ok { return api, nil } ctrl, err := r.Controller(ctx, instanceID) if err != nil { return nil, err } resource, err := ctrl.Get(ctx, &runtimev1.ResourceName{Kind: ResourceKindAPI, Name: name}, false) if err != nil { return nil, err } return resource.GetApi(), nil }