This repository has been archived on 2024-05-26. You can view files and clone it, but cannot push or open issues or pull requests.
trixy/tests/.template/expected.md

5.4 KiB

Host files

File path: out/dir/api.rs

// Host code
/* Rust API */
#[derive(Debug)]
pub enum Commands {
    #[allow(non_camel_case_types)]
    print { message: String },
    Trinitrix(trinitrix::Trinitrix),
}
pub mod trinitrix {
    #[derive(Debug)]
    pub enum Trinitrix {
        #[allow(non_camel_case_types)]
        hi { trixy_output: trixy::oneshot::Sender<trixy::types::String>, name: String },
    }
}
/* C API */
#[no_mangle]
pub extern "C" fn print(message: String) -> core::ffi::c_int {
    callback_function(print);
    return 1;
}
pub mod trinitrix_c {}
#[no_mangle]
pub extern "C" fn trinitrix_hi(
    output: *mut trixy::types::String,
    name: String,
) -> core::ffi::c_int {
    let output_val: trixy::types::String = {
        let (tx, rx) = trixy::oneshot::channel();
        callback_function(trinitrix_hi);
        let recv = rx
            .recv()
            .expect("The channel should not be closed until this value is received");
        recv.into()
    };
    unsafe {
        std::ptr::write(output, output_val);
    }
    return 1;
}
// vim: filetype=rust

Auxiliary files

File path: dist/interface.h

#if !defined TRIXY_MAIN_HEADER
#define TRIXY_MAIN_HEADER

#include "errno.h"
#include "string.h"
#include "vec.h"

extern int print (const char *message);

extern int trinitrix_hi (const char **trixy_output, const char *name);

struct trinitrix
{
  int (*hi) (const char **, const char *);
};

const struct trinitrix trinitrix = {
  .hi = trinitrix_hi,
};

#endif // if !defined TRIXY_MAIN_HEADER
// vim: filetype=c

File path: dist/errno.h

/*
 * Copyright (C) 2023 - 2024:
 * The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org>
 *
 * This file is part of the Trixy crate for Trinitrix.
 *
 * Trixy is free software: you can redistribute it and/or modify
 * it under the terms of the Lesser GNU General Public License as
 * published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * and the Lesser GNU General Public License along with this program.
 * If not, see <https://www.gnu.org/licenses/>.
 */

#ifndef TRIXY_ERRNO_H
#define TRIXY_ERRNO_H
#include <stdint.h>

/** Calculate the number of bytes in the last error's error message **not**
 * including any trailing `null` characters.
 */
extern int last_error_length ();

/** Write the most recent error message into a caller-provided buffer as a
 * UTF-8 string, returning the number of bytes written.
 *
 * # Note
 *
 * This writes a **UTF-8** string into the buffer. Windows users may need to
 * convert it to a UTF-16 “Unicode” afterwards.
 *
 * If there are no recent errors then this returns `0` (because we wrote 0
 * bytes). `-1` is returned if there are any errors, for example when passed a
 * null pointer or a buffer of insufficient size.
 */
extern int last_error_message (char *buffer, uint64_t length);

#endif // TRIXY_ERRNO_H

File path: dist/string.h

/*
 * Copyright (C) 2023 - 2024:
 * The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org>
 *
 * This file is part of the Trixy crate for Trinitrix.
 *
 * Trixy is free software: you can redistribute it and/or modify
 * it under the terms of the Lesser GNU General Public License as
 * published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * and the Lesser GNU General Public License along with this program.
 * If not, see <https://www.gnu.org/licenses/>.
 */

#ifndef TRIXY_STRING_H
#define TRIXY_STRING_H

/**
 * @brief Frees a rust-allocated string.
 */
extern int string_free (const char *string);

#endif // TRIXY_STRING_H

File path: dist/vec.h

/*
 * Copyright (C) 2023 - 2024:
 * The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org>
 *
 * This file is part of the Trixy crate for Trinitrix.
 *
 * Trixy is free software: you can redistribute it and/or modify
 * it under the terms of the Lesser GNU General Public License as
 * published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * and the Lesser GNU General Public License along with this program.
 * If not, see <https://www.gnu.org/licenses/>.
 */

#ifndef TRIXY_VEC_H
#define TRIXY_VEC_H
#include <stdlib.h>

/**
 * @brief A read-only vector from rust.
 *
 * @detail
 * You are must not free it by calling c's `free`. Use `vec_free`
 * instead.
 */
struct vec
{
  void *data;
  size_t length;
};

extern int vec_free (struct vec vector);

#endif // TRIXY_VEC_H