// Copyright 2017 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.

#include "generator.h"

bool RustBindingGenerator::header(std::ofstream& os) {
    if (!Generator::header(os)) {
        return false;
    }
    os << "#[link(name = \"zircon\")]\n";
    os << "extern {\n";
    return os.good();
}

bool RustBindingGenerator::footer(std::ofstream& os) {
    if (!Generator::footer(os)) {
        return false;
    }
    os << "}\n";
    return os.good();
}

bool RustBindingGenerator::syscall(std::ofstream& os, const Syscall& sc) {
    if (sc.is_internal()) {
        return os.good();
    }

    os << "    pub fn zx_" << sc.name << "(";

    // Writes all arguments.
    sc.for_each_kernel_arg([&](const TypeSpec& arg) {
        os << "\n        "
           << arg.as_rust_declaration() << ",";
    });

    if (!os.good()) {
        return false;
    }

    if (sc.num_kernel_args() > 0) {
        // remove the comma.
        os.seekp(-1, std::ios_base::end);
    }
    // Finish off list and write return type
    os << "\n        )";
    if (sc.return_type() != "void") {
        os << " -> " << map_override(sc.return_type(), rust_primitives);
    }
    os << ";\n\n";

    return os.good();
}
