/*
 *   Copyright (c) 2014-2017 Nest Labs, Inc.
 *   All rights reserved.
 *
 *    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.
 */

/**
 *    @file
 *      This is a copy of the locale settings trait from the phoenix schema
 *      repo for use as a simple mock trait for WDM testing.
 *
 */

syntax = "proto3";

package weave.trait.locale;

import "wdl/wdl_options.proto";

// Nothing actually imported
// import "weave/trait/locale/locale_trait.proto";

option (wdl.trait) = {
        vendor_id: 0x0000,
        id:        0x0013,
        version:   1
};

message SimpleMockTrait {
        option (wdl.message_type) = PROPERTIES;

        string  active_locale = 1;
};
