1
0
mirror of https://github.com/Sebekerga/native_api_1c.git synced 2025-06-14 23:45:13 +02:00

v0.10.1 to reflect macro changes

This commit is contained in:
Kozlov Maxim
2023-08-11 11:20:20 +06:00
parent 6af9615ae7
commit 43ba63eb24
4 changed files with 77 additions and 21 deletions

View File

@ -7,26 +7,55 @@
Пример реализации простой компоненты: Пример реализации простой компоненты:
```toml
# Cargo.toml
[package]
name = "my_addin"
version = "0.1.0"
edition = "2021"
[lib]
crate-type = ["cdylib"]
[dependencies]
utf16_lit = "2.0"
native_api_1c = "0.10.1"
```
```rust ```rust
// lib.rs // src/lib.rs
use std::sync::Arc; use std::sync::Arc;
use native_api_1c::{ use native_api_1c::{native_api_1c_core::ffi::connection::Connection, native_api_1c_macro::AddIn};
native_api_1c_core::{self, ffi::connection::Connection},
native_api_1c_macro::AddIn,
};
#[derive(AddIn)] #[derive(AddIn)]
pub struct MyAddIn { pub struct MyAddIn {
// соедиенение с 1С для вызова внешних событий
#[add_in_con] #[add_in_con]
connection: Arc<Option<&'static Connection>>, // Arc для возможности многопоточности connection: Arc<Option<&'static Connection>>, // Arc для возможности многопоточности
// свойство, доступное для чтения и записи
#[add_in_prop(name = "MyProp", name_ru = "МоеСвойство", readable, writable)] #[add_in_prop(name = "MyProp", name_ru = "МоеСвойство", readable, writable)]
pub some_prop: i32, pub some_prop: i32,
// свойство, доступное только для чтения
#[add_in_prop(name = "ProtectedProp", name_ru = "ЗащищенноеСвойство", readable)] #[add_in_prop(name = "ProtectedProp", name_ru = "ЗащищенноеСвойство", readable)]
pub protected_prop: i32, pub protected_prop: i32,
// функция, принимающая один или два аргумента и возвращающая результат
// в 1С можно вызвать как:
// ОбъектКомпоненты.МояФункция(10, 15); // 2й аргумент = 15
// ОбъектКомпоненты.МояФункция(10); // 2й аргумент = 12 (значение по умолчанию)
// Если функция возвращает ошибку, но не паника, то в 1С будет вызвано исключение
#[add_in_func(name = "MyFunction", name_ru = "МояФункция")] #[add_in_func(name = "MyFunction", name_ru = "МояФункция")]
pub my_function: fn(&Self, i32) -> i32, #[arg(Int)]
#[arg(Int, default = 12)]
#[returns(Int, result)]
pub my_function: fn(&Self, i32, i64) -> Result<i32, ()>,
// Процедура, ничего не получающая, ничего не возвращающая
#[add_in_func(name = "MyProcedure", name_ru = "МояПроцедура")]
pub my_procedure: fn(&mut Self),
private_field: i32, private_field: i32,
} }
@ -38,12 +67,21 @@ impl MyAddIn {
some_prop: 0, some_prop: 0,
protected_prop: 50, protected_prop: 50,
my_function: Self::my_function, my_function: Self::my_function,
my_procedure: Self::my_procedure,
private_field: 100, private_field: 100,
} }
} }
fn my_function(&self, arg: i32) -> i32 { fn my_function(&self, arg: i32, arg_maybe_default: i64) -> Result<i32, ()> {
self.protected_prop + self.some_prop + arg + self.private_field Ok(self.protected_prop
+ self.some_prop
+ arg
+ self.private_field
+ arg_maybe_default as i32)
}
fn my_procedure(&mut self) {
self.protected_prop += 1;
} }
} }
``` ```

View File

@ -8,7 +8,7 @@ crate-type = ["cdylib"]
[dependencies] [dependencies]
utf16_lit = "2.0" utf16_lit = "2.0"
native_api_1c = "0.9.3" native_api_1c = "0.10.1"
[workspace] [workspace]

View File

@ -1,21 +1,35 @@
use std::sync::Arc; use std::sync::Arc;
use native_api_1c::native_api_1c_core::ffi::connection::Connection; use native_api_1c::{native_api_1c_core::ffi::connection::Connection, native_api_1c_macro::AddIn};
use native_api_1c::native_api_1c_macro::AddIn;
#[derive(AddIn)] #[derive(AddIn)]
pub struct MyAddIn { pub struct MyAddIn {
// соедиенение с 1С для вызова внешних событий
#[add_in_con] #[add_in_con]
connection: Arc<Option<&'static Connection>>, connection: Arc<Option<&'static Connection>>, // Arc для возможности многопоточности
// свойство, доступное для чтения и записи
#[add_in_prop(name = "MyProp", name_ru = "МоеСвойство", readable, writable)] #[add_in_prop(name = "MyProp", name_ru = "МоеСвойство", readable, writable)]
pub some_prop: i32, pub some_prop: i32,
// свойство, доступное только для чтения
#[add_in_prop(name = "ProtectedProp", name_ru = "ЗащищенноеСвойство", readable)] #[add_in_prop(name = "ProtectedProp", name_ru = "ЗащищенноеСвойство", readable)]
pub protected_prop: i32, pub protected_prop: i32,
// функция, принимающая один или два аргумента и возвращающая результат
// в 1С можно вызвать как:
// ОбъектКомпоненты.МояФункция(10, 15); // 2й аргумент = 15
// ОбъектКомпоненты.МояФункция(10); // 2й аргумент = 12 (значение по умолчанию)
// Если функция возвращает ошибку, но не паника, то в 1С будет вызвано исключение
#[add_in_func(name = "MyFunction", name_ru = "МояФункция")] #[add_in_func(name = "MyFunction", name_ru = "МояФункция")]
pub my_function: fn(&Self, i32) -> i32, #[arg(Int)]
#[add_in_func(name = "SumOfTwo", name_ru = "СуммаДвух")] #[arg(Int, default = 12)]
pub sum_of_2: fn(&Self, i32, i32) -> String, #[returns(Int, result)]
pub my_function: fn(&Self, i32, i64) -> Result<i32, ()>,
// Процедура, ничего не получающая, ничего не возвращающая
#[add_in_func(name = "MyProcedure", name_ru = "МояПроцедура")]
pub my_procedure: fn(&mut Self),
private_field: i32, private_field: i32,
} }
@ -27,16 +41,20 @@ impl MyAddIn {
some_prop: 0, some_prop: 0,
protected_prop: 50, protected_prop: 50,
my_function: Self::my_function, my_function: Self::my_function,
sum_of_2: Self::sum_of_2, my_procedure: Self::my_procedure,
private_field: 100, private_field: 100,
} }
} }
fn my_function(&self, arg: i32) -> i32 { fn my_function(&self, arg: i32, arg_maybe_default: i64) -> Result<i32, ()> {
self.protected_prop + self.some_prop + arg + self.private_field Ok(self.protected_prop
+ self.some_prop
+ arg
+ self.private_field
+ arg_maybe_default as i32)
} }
fn sum_of_2(&self, arg1: i32, arg2: i32) -> String { fn my_procedure(&mut self) {
format!("{}", arg1 + arg2) self.protected_prop += 1;
} }
} }