librespot/capi/src/link.rs
2016-02-05 21:11:55 +00:00

36 lines
933 B
Rust

use metadata::SpMetadata;
use session::SpSession;
use track::sp_track;
use types::sp_error;
use types::sp_error::*;
use std::ffi::CStr;
use std::rc::Rc;
use libc::c_char;
use librespot::link::Link;
#[allow(non_camel_case_types)]
pub type sp_link = Rc<Link>;
#[no_mangle]
pub unsafe extern "C" fn sp_link_create_from_string(uri: *const c_char) -> *mut sp_link {
let uri = CStr::from_ptr(uri).to_string_lossy();
let link = Link::from_str(&uri).unwrap();
Box::into_raw(Box::new(Rc::new(link)))
}
#[no_mangle]
pub unsafe extern "C" fn sp_link_release(c_link: *mut sp_link) -> sp_error {
drop(Box::from_raw(c_link));
SP_ERROR_OK
}
#[no_mangle]
pub unsafe extern "C" fn sp_link_as_track(c_link: *mut sp_link) -> *mut sp_track {
let link = &*c_link;
let session = SpSession::global();
let track = SpMetadata::from_future(link.as_track(&session.session).unwrap());
Box::into_raw(Box::new(track))
}