use crate::class::Class;
use crate::object::Object;
use jni::errors::Result;
use jni::objects::{JString, JValue};
use jni::strings::JNIString;
use jni::sys::_jobject;
use jni::JNIEnv;
#[derive(Clone)]
pub struct JavaString<'a> {
pub inner: Object<'a>,
env: &'a JNIEnv<'a>,
}
#[allow(clippy::from_over_into)]
impl<'a> Into<JValue<'a>> for JavaString<'a> {
fn into(self) -> JValue<'a> {
self.inner.clone().into()
}
}
#[allow(clippy::from_over_into)]
impl<'a> Into<*mut _jobject> for JavaString<'a> {
fn into(self) -> *mut _jobject {
self.inner.inner.into_inner()
}
}
impl<'a> JavaString<'a> {
pub fn new(env: &'a JNIEnv<'a>, object: Object<'a>) -> Self {
Self { inner: object, env }
}
pub fn from_rust<S: Into<JNIString>>(env: &'a JNIEnv<'a>, s: S) -> Result<Self> {
let string = env.new_string(s)?;
Ok(Self::new(
env,
Object::new(env, string.into(), Class::String(env)?),
))
}
pub fn into_rust(&self) -> Result<String> {
Ok(self.env.get_string(JString::from(self.inner.inner))?.into())
}
}