/*
 * Copyright 2021 The Feast 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
 *
 *     https://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.
 */

syntax = "proto3";

package feast.serving;

option java_package = "feast.proto.serving";
option java_outer_classname = "TransformationServiceAPIProto";
option go_package = "github.com/feast-dev/feast/go/protos/feast/serving";

service TransformationService {
    rpc GetTransformationServiceInfo (GetTransformationServiceInfoRequest) returns (GetTransformationServiceInfoResponse);

    rpc TransformFeatures (TransformFeaturesRequest) returns (TransformFeaturesResponse);
}

message ValueType {
    oneof value {
        // Having a oneOf provides forward compatibility if we need to support compound types
        // that are not supported by arrow natively.
        bytes arrow_value = 1;
    }
}

message GetTransformationServiceInfoRequest {}

message GetTransformationServiceInfoResponse {
    // Feast version of this transformation service deployment.
    string version = 1;

    // Type of transformation service deployment. This is either Python, or custom
    TransformationServiceType type = 2;

    string transformation_service_type_details = 3;
}

message TransformFeaturesRequest {
    string on_demand_feature_view_name = 1;
    string project = 2;

    ValueType transformation_input = 3;
}

message TransformFeaturesResponse {
    ValueType transformation_output = 3;
}

enum TransformationServiceType {
    TRANSFORMATION_SERVICE_TYPE_INVALID = 0;
    TRANSFORMATION_SERVICE_TYPE_PYTHON = 1;

    TRANSFORMATION_SERVICE_TYPE_CUSTOM = 100;
}
