/*
* Copyright 2026 LiveKit
*
* 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.
*/
#include "data_track_proto_converter.h"
namespace livekit {
proto::DataTrackSchemaEncoding toProto(const DataTrackSchemaEncoding& in) {
proto::DataTrackSchemaEncoding out;
if (in.isCustom()) {
out.set_custom(in.customIdentifier());
return out;
}
switch (in.wellKnown()) {
case DataTrackSchemaEncoding::Protobuf:
out.set_well_known(proto::DataTrackSchemaEncoding::WELL_KNOWN_SCHEMA_ENCODING_PROTOBUF);
break;
case DataTrackSchemaEncoding::Flatbuffer:
out.set_well_known(proto::DataTrackSchemaEncoding::WELL_KNOWN_SCHEMA_ENCODING_FLATBUFFER);
break;
case DataTrackSchemaEncoding::Ros1Msg:
out.set_well_known(proto::DataTrackSchemaEncoding::WELL_KNOWN_SCHEMA_ENCODING_ROS1_MSG);
break;
case DataTrackSchemaEncoding::Ros2Msg:
out.set_well_known(proto::DataTrackSchemaEncoding::WELL_KNOWN_SCHEMA_ENCODING_ROS2_MSG);
break;
case DataTrackSchemaEncoding::Ros2Idl:
out.set_well_known(proto::DataTrackSchemaEncoding::WELL_KNOWN_SCHEMA_ENCODING_ROS2_IDL);
break;
case DataTrackSchemaEncoding::OmgIdl:
out.set_well_known(proto::DataTrackSchemaEncoding::WELL_KNOWN_SCHEMA_ENCODING_OMG_IDL);
break;
case DataTrackSchemaEncoding::JsonSchema:
out.set_well_known(proto::DataTrackSchemaEncoding::WELL_KNOWN_SCHEMA_ENCODING_JSON_SCHEMA);
break;
case DataTrackSchemaEncoding::Other:
out.set_well_known(proto::DataTrackSchemaEncoding::WELL_KNOWN_SCHEMA_ENCODING_UNSPECIFIED);
break;
}
return out;
}
DataTrackSchemaEncoding fromProto(const proto::DataTrackSchemaEncoding& in) {
if (in.encoding_case() == proto::DataTrackSchemaEncoding::kCustom) {
return DataTrackSchemaEncoding::custom(in.custom());
}
switch (in.well_known()) {
case proto::DataTrackSchemaEncoding::WELL_KNOWN_SCHEMA_ENCODING_PROTOBUF:
return DataTrackSchemaEncoding::Protobuf;
case proto::DataTrackSchemaEncoding::WELL_KNOWN_SCHEMA_ENCODING_FLATBUFFER:
return DataTrackSchemaEncoding::Flatbuffer;
case proto::DataTrackSchemaEncoding::WELL_KNOWN_SCHEMA_ENCODING_ROS1_MSG:
return DataTrackSchemaEncoding::Ros1Msg;
case proto::DataTrackSchemaEncoding::WELL_KNOWN_SCHEMA_ENCODING_ROS2_MSG:
return DataTrackSchemaEncoding::Ros2Msg;
case proto::DataTrackSchemaEncoding::WELL_KNOWN_SCHEMA_ENCODING_ROS2_IDL:
return DataTrackSchemaEncoding::Ros2Idl;
case proto::DataTrackSchemaEncoding::WELL_KNOWN_SCHEMA_ENCODING_OMG_IDL:
return DataTrackSchemaEncoding::OmgIdl;
case proto::DataTrackSchemaEncoding::WELL_KNOWN_SCHEMA_ENCODING_JSON_SCHEMA:
return DataTrackSchemaEncoding::JsonSchema;
default:
return DataTrackSchemaEncoding::Other;
}
}
proto::DataTrackFrameEncoding toProto(const DataTrackFrameEncoding& in) {
proto::DataTrackFrameEncoding out;
if (in.isCustom()) {
out.set_custom(in.customIdentifier());
return out;
}
switch (in.wellKnown()) {
case DataTrackFrameEncoding::Ros1:
out.set_well_known(proto::DataTrackFrameEncoding::WELL_KNOWN_FRAME_ENCODING_ROS1);
break;
case DataTrackFrameEncoding::Cdr:
out.set_well_known(proto::DataTrackFrameEncoding::WELL_KNOWN_FRAME_ENCODING_CDR);
break;
case DataTrackFrameEncoding::Protobuf:
out.set_well_known(proto::DataTrackFrameEncoding::WELL_KNOWN_FRAME_ENCODING_PROTOBUF);
break;
case DataTrackFrameEncoding::Flatbuffer:
out.set_well_known(proto::DataTrackFrameEncoding::WELL_KNOWN_FRAME_ENCODING_FLATBUFFER);
break;
case DataTrackFrameEncoding::Cbor:
out.set_well_known(proto::DataTrackFrameEncoding::WELL_KNOWN_FRAME_ENCODING_CBOR);
break;
case DataTrackFrameEncoding::Msgpack:
out.set_well_known(proto::DataTrackFrameEncoding::WELL_KNOWN_FRAME_ENCODING_MSGPACK);
break;
case DataTrackFrameEncoding::Json:
out.set_well_known(proto::DataTrackFrameEncoding::WELL_KNOWN_FRAME_ENCODING_JSON);
break;
case DataTrackFrameEncoding::Other:
out.set_well_known(proto::DataTrackFrameEncoding::WELL_KNOWN_FRAME_ENCODING_UNSPECIFIED);
break;
}
return out;
}
DataTrackFrameEncoding fromProto(const proto::DataTrackFrameEncoding& in) {
if (in.encoding_case() == proto::DataTrackFrameEncoding::kCustom) {
return DataTrackFrameEncoding::custom(in.custom());
}
switch (in.well_known()) {
case proto::DataTrackFrameEncoding::WELL_KNOWN_FRAME_ENCODING_ROS1:
return DataTrackFrameEncoding::Ros1;
case proto::DataTrackFrameEncoding::WELL_KNOWN_FRAME_ENCODING_CDR:
return DataTrackFrameEncoding::Cdr;
case proto::DataTrackFrameEncoding::WELL_KNOWN_FRAME_ENCODING_PROTOBUF:
return DataTrackFrameEncoding::Protobuf;
case proto::DataTrackFrameEncoding::WELL_KNOWN_FRAME_ENCODING_FLATBUFFER:
return DataTrackFrameEncoding::Flatbuffer;
case proto::DataTrackFrameEncoding::WELL_KNOWN_FRAME_ENCODING_CBOR:
return DataTrackFrameEncoding::Cbor;
case proto::DataTrackFrameEncoding::WELL_KNOWN_FRAME_ENCODING_MSGPACK:
return DataTrackFrameEncoding::Msgpack;
case proto::DataTrackFrameEncoding::WELL_KNOWN_FRAME_ENCODING_JSON:
return DataTrackFrameEncoding::Json;
default:
return DataTrackFrameEncoding::Other;
}
}
proto::DataTrackSchemaId toProto(const DataTrackSchemaId& in) {
proto::DataTrackSchemaId out;
out.set_name(in.name);
*out.mutable_encoding() = toProto(in.encoding);
return out;
}
DataTrackSchemaId fromProto(const proto::DataTrackSchemaId& in) {
DataTrackSchemaId out;
out.name = in.name();
out.encoding = fromProto(in.encoding());
return out;
}
DataTrackInfo fromProto(const proto::DataTrackInfo& in) {
DataTrackInfo out;
out.name = in.name();
out.sid = in.sid();
out.uses_e2ee = in.uses_e2ee();
if (in.has_schema()) {
out.schema = fromProto(in.schema());
}
if (in.has_frame_encoding()) {
out.frame_encoding = fromProto(in.frame_encoding());
}
return out;
}
} // namespace livekit