59 lines
859 B
Rust
59 lines
859 B
Rust
|
use napi::bindgen_prelude::*;
|
||
|
|
||
|
pub struct Repository {
|
||
|
dir: String,
|
||
|
}
|
||
|
|
||
|
impl Repository {
|
||
|
fn remote(&self) -> Remote {
|
||
|
Remote { inner: self }
|
||
|
}
|
||
|
}
|
||
|
|
||
|
pub struct Remote<'repo> {
|
||
|
inner: &'repo Repository,
|
||
|
}
|
||
|
|
||
|
impl<'repo> Remote<'repo> {
|
||
|
fn name(&self) -> String {
|
||
|
"origin".to_owned()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#[napi]
|
||
|
pub struct JsRepo {
|
||
|
inner: Repository,
|
||
|
}
|
||
|
|
||
|
#[napi]
|
||
|
impl JsRepo {
|
||
|
#[napi(constructor)]
|
||
|
pub fn new(dir: String) -> Self {
|
||
|
JsRepo {
|
||
|
inner: Repository { dir },
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#[napi]
|
||
|
pub fn remote(&self) -> Result<JsRemote> {
|
||
|
Ok(JsRemote {
|
||
|
inner: self
|
||
|
.create_reference()?
|
||
|
.share_with(|repo| Ok(repo.inner.remote()))?,
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#[napi]
|
||
|
pub struct JsRemote {
|
||
|
inner: SharedReference<JsRepo, Remote<'static>>,
|
||
|
}
|
||
|
|
||
|
#[napi]
|
||
|
impl JsRemote {
|
||
|
#[napi]
|
||
|
pub fn name(&self) -> String {
|
||
|
self.inner.name()
|
||
|
}
|
||
|
}
|