1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2024-12-29 02:57:35 +02:00

Улучшение шаблона ВК

This commit is contained in:
Anton Titovets 2024-12-09 10:08:27 +03:00
parent 3f63a8aeb1
commit f2bcde2124
5 changed files with 94 additions and 79 deletions

View File

@ -0,0 +1,70 @@
mod methods;
use addin1c::{name, Variant};
// МЕТОДЫ КОМПОНЕНТЫ -------------------------------------------------------------------------------
// Синонимы
pub const METHODS: &[&[u16]] = &[
name!("Метод1") // 0
];
// Число параметров функций компоненты
pub fn get_params_amount(num: usize) -> usize {
match num {
0 => 1,
_ => 0,
}
}
// Соответствие функций Rust функциям компоненты
// Вызовы должны быть обернуты в Box::new
pub fn cal_func(obj: &AddIn, num: usize, params: &mut [Variant]) -> Box<dyn crate::core::getset::ValueType> {
match num {
0 => Box::new(methods::send_message(&obj, &params)),
_ => Box::new(false),
}
}
// -------------------------------------------------------------------------------------------------
// ПОЛЯ КОМПОНЕНТЫ ---------------------------------------------------------------------------------
// Синонимы
pub const PROPS: &[&[u16]] = &[
name!("Свойство1"),
name!("Свойство2")
];
// Имена и типы
pub struct AddIn {
field1: String,
field2: i32
}
// Конструктор
impl AddIn {
// Значения по умолчанию
pub fn new() -> AddIn {
AddIn {
field1: String::from(""),
field2: 0
}
}
// Сюда просто нужно еще раз добавить имена полей
pub fn get_field_ptr<T>(&self, index: usize) -> *const T {
match index {
0 => &self.field1 as *const _,
1 => &self.field2 as *const _,
_ => panic!("Index out of bounds"),
}
}
pub fn get_field_ptr_mut<T>(&mut self, index: usize) -> *mut T { self.get_field_ptr(index) as *mut _ }
}
// -------------------------------------------------------------------------------------------------

View File

@ -1,86 +1,14 @@
mod getset;
mod methods;
pub mod getset;
use addin1c::{name, ParamValue, RawAddin, Variant};
use std::ops::{Index, IndexMut};
// МЕТОДЫ КОМПОНЕНТЫ -------------------------------------------------------------------------------
use crate::component::METHODS;
use crate::component::PROPS;
use crate::component::get_params_amount;
use crate::component::cal_func;
use crate::component::AddIn;
// Русские синонимы
const METHODS: &[&[u16]] = &[
name!("Метод1")
];
// Число параметров по индексу
fn get_params_amount(num: usize) -> usize {
match num {
0 => 1,
_ => 0,
}
}
fn cal_func(obj: &AddIn, num: usize, params: &mut [Variant]) -> Box<dyn getset::ValueType> {
match num {
0 => Box::new(methods::send_message(&obj, &params)),
_ => Box::new(false),
}
}
// -------------------------------------------------------------------------------------------------
// ПОЛЯ КОМПОНЕНТЫ ---------------------------------------------------------------------------------
// Русские синонимы
const PROPS: &[&[u16]] = &[
name!("Свойство1"),
name!("Свойство2")
];
// Имена и типы
pub struct AddIn {
field1: String,
field2: i32
}
// Значения по умолчанию
impl AddIn {
pub fn new() -> AddIn {
AddIn {
field1: String::from(""),
field2: 0
}
}
}
// Индекс
impl Index<usize> for AddIn {
type Output = dyn getset::ValueType;
fn index(&self, index: usize) -> &Self::Output {
match index {
0 => &self.field1, // Возвращаем ссылку на field1
1 => &self.field2, // Возвращаем ссылку на field2
_ => panic!("Index out of bounds"),
}
}
}
impl IndexMut<usize> for AddIn {
fn index_mut(&mut self, index: usize) -> &mut Self::Output {
match index {
0 => &mut self.field1, // Возвращаем изменяемую ссылку на field1
1 => &mut self.field2, // Возвращаем изменяемую ссылку на field2
_ => panic!("Index out of bounds"),
}
}
}
// -------------------------------------------------------------------------------------------------
// ТО, ЧТО ТРОГАТЬ НЕ НУЖНО ------------------------------------------------------------------------
// Обработка удаления объекта
impl Drop for AddIn {
@ -115,4 +43,18 @@ impl RawAddin for AddIn {
}
impl std::ops::Index<usize> for AddIn {
type Output = dyn getset::ValueType;
fn index(&self, index: usize) -> &Self::Output {
unsafe { &*self.get_field_ptr(index) }
}
}
impl std::ops::IndexMut<usize> for AddIn {
fn index_mut(&mut self, index: usize) -> &mut Self::Output {
unsafe { &mut *self.get_field_ptr_mut(index) }
}
}

View File

@ -1,5 +1,7 @@
pub mod component;
mod core;
use std::{
ffi::{c_int, c_long, c_void},
sync::atomic::{AtomicI32, Ordering},

View File

@ -1,3 +1,4 @@
Manifest-Version: 1.0
Runtime-Version: 8.3.15
Base-Project: OpenIntegrations_ENG
Base-Project: OpenIntegrationsENG
Manifest-Version: 1.0