Skip to content

导出Class

rust
use std::path::{Path, PathBuf};
use napi_derive::napi;
use tokio::{fs};
use futures::prelude::*;
use napi::bindgen_prelude::*;

// 此处可以通过js_name制定类名
#[napi(js_name = "ClassDemoName")]
pub struct ClassDemo {
  name: String
}

#[napi]
impl ClassDemo {
  // 设置当前的new方法为构造函数
  #[napi(constructor)]
  pub fn new() -> Self {
    ClassDemo {
      name: String::from("123")
    }
  }

  // 设置一个工厂方法,必须返回当前的类, 最后会变成一个静态的方法,并且返回当前类的实例
  #[napi(factory)]
  pub fn with_initial_count(count: u32) -> ClassDemo {
    ClassDemo {
      name: String::from(count.to_string())
    }
  }

  // 设置一个普通的异步方法
  #[napi]
  pub async fn read_dir(&self, query: String) -> napi::Result<String> {
    let res = fs::read_to_string(PathBuf::from(query)).await?;
    Ok(res)
  }

  // 设置一个普通方法
  #[napi]
  pub fn return_string(&self) -> napi::Result<String> {
    Ok(String::from("value"))
  }

  // 设置一个getter
  #[napi(getter)]
  pub fn name(&self) -> &str {
    self.name.as_str()
  }

  // 设置一个setter
  #[napi(setter)]
  pub fn set_name(&mut self, s: String) {
    self.name = s;
  }

  // 设置方法的可访问性 writable / enumerable / configurable
  #[napi(writable = false)]
  pub fn get_name(&self) -> &str {
    self.name.as_str()
  }
}
use std::path::{Path, PathBuf};
use napi_derive::napi;
use tokio::{fs};
use futures::prelude::*;
use napi::bindgen_prelude::*;

// 此处可以通过js_name制定类名
#[napi(js_name = "ClassDemoName")]
pub struct ClassDemo {
  name: String
}

#[napi]
impl ClassDemo {
  // 设置当前的new方法为构造函数
  #[napi(constructor)]
  pub fn new() -> Self {
    ClassDemo {
      name: String::from("123")
    }
  }

  // 设置一个工厂方法,必须返回当前的类, 最后会变成一个静态的方法,并且返回当前类的实例
  #[napi(factory)]
  pub fn with_initial_count(count: u32) -> ClassDemo {
    ClassDemo {
      name: String::from(count.to_string())
    }
  }

  // 设置一个普通的异步方法
  #[napi]
  pub async fn read_dir(&self, query: String) -> napi::Result<String> {
    let res = fs::read_to_string(PathBuf::from(query)).await?;
    Ok(res)
  }

  // 设置一个普通方法
  #[napi]
  pub fn return_string(&self) -> napi::Result<String> {
    Ok(String::from("value"))
  }

  // 设置一个getter
  #[napi(getter)]
  pub fn name(&self) -> &str {
    self.name.as_str()
  }

  // 设置一个setter
  #[napi(setter)]
  pub fn set_name(&mut self, s: String) {
    self.name = s;
  }

  // 设置方法的可访问性 writable / enumerable / configurable
  #[napi(writable = false)]
  pub fn get_name(&self) -> &str {
    self.name.as_str()
  }
}