// Copyright 2019 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 describing a calculator protocol. Such a protocol allows a calculator UI and its
/// mathematical operations to be independent.
///
/// This library only operates on and returns 64-bit floating point numbers. All operations
/// are performed in floating point and may lose precision.
library fuchsia.examples.calculator;

/// An operation that generates a result for a single input value.
type UnaryOp = strict enum {
    NEGATION = 0;
};

/// An operation that generates a result for two input values.
type BinaryOp = strict enum {
    ADDITION = 0;
    SUBTRACTION = 1;
    MULTIPLICATION = 2;
    DIVISION = 3;
};

/// The result of a failed operation.
type Error = struct {
    message string:200;
};

// [START union]
/// The result of an operation. A result is either a single number or an
/// [Error] value.
type Result = union {
    1: number float64;
    2: reserved;
    3: error Error;
};
// [END union]

/// A calculator that can perform mathematical operations.
@discoverable
protocol Calculator {
    /// Performs the requested operation on a single value and returns the result.
    DoUnaryOp(struct { operation UnaryOp; a float64; }) -> (struct { result Result; });

    /// Performs the requested operation on two values and returns the result.
    DoBinaryOp(struct { operation BinaryOp; a float64; b float64; }) -> (struct { result Result; });
};
