// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fidl.test.during;

protocol AddMethod {
    ExistingMethod();
    [Transitional]
    NewMethod();
};

protocol RemoveMethod {
    ExistingMethod();
    [Transitional]
    OldMethod();
};

protocol AddEvent {
    ExistingMethod();
    [Transitional]
    -> NewEvent();
};

protocol RemoveEvent {
    ExistingMethod();
    [Transitional]
    -> OldEvent();
};
