/*
 * Copyright (C) 2016 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";

package android;

option java_package = "com.android.incident";
option java_multiple_files = true;

import "google/protobuf/descriptor.proto";

enum Destination {
    // Fields or messages annotated with DEST_LOCAL must never be
    // extracted from the device automatically. They can be accessed
    // by tools on the developer's workstation or test lab devices.
    DEST_LOCAL = 0;

    // Fields or messages annotated with DEST_EXPLICIT can be sent
    // off the device with an explicit user action.
    DEST_EXPLICIT = 100;

    // Fields or messages annotated with DEST_AUTOMATIC can be sent by
    // automatic means, without per-sending user consent. The user
    // still must have previously accepted a consent to share this
    // information.
    DEST_AUTOMATIC = 200;

    // This is the default value, which could be overridden by other values.
    // The reason to pick 255 is it fits into one byte. UNSET fields are treated
    // as EXPLICIT.
    DEST_UNSET = 255;

    // Currently use 0, 100, 200 and 255, values in between are reserved for futures.
}

message PrivacyFlags {
    optional Destination dest = 1 [ default = DEST_UNSET ];

    // regex to filter pii sensitive info from a string field type.
    repeated string patterns = 2;
}

extend google.protobuf.FieldOptions {
    // Flags used to annotate a field with right privacy level.
    optional PrivacyFlags privacy = 102672883;
}

extend google.protobuf.MessageOptions {
    // Flags used to annotate a message which all its unset primitive fields inhert this tag.
    optional PrivacyFlags msg_privacy = 102672883;
}

