/*
 * Copyright (C) 2019 The Android Open Source Project
 *
 * 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.
 */

syntax = "proto2";
option optimize_for = LITE_RUNTIME;

message PropertyMessage {
    message ControlMessage {
        optional string msg = 1;
        optional string name = 2;
        optional int32 pid = 3;
        optional int32 fd = 4;
    }

    message ChangedMessage {
        optional string name = 1;
        optional string value = 2;
    }

    oneof msg {
        ControlMessage control_message = 1;
        ChangedMessage changed_message = 2;
    };
}

message InitMessage {
    oneof msg {
        bool load_persistent_properties = 1;
        bool stop_sending_messages = 2;
        bool start_sending_messages = 3;
    };
}
