artist.rs 731 B

123456789101112131415161718192021222324252627282930313233
  1. use libc::c_char;
  2. use std::ffi::CString;
  3. use std::mem;
  4. use librespot::metadata::Artist;
  5. use metadata::SpMetadata;
  6. #[allow(non_camel_case_types)]
  7. pub type sp_artist = SpMetadata<Artist>;
  8. #[no_mangle]
  9. pub unsafe extern "C" fn sp_artist_is_loaded(c_artist: *mut sp_artist) -> bool {
  10. let artist = &*c_artist;
  11. artist.is_loaded()
  12. }
  13. #[no_mangle]
  14. pub unsafe extern "C" fn sp_artist_name(c_artist: *mut sp_artist) -> *const c_char {
  15. let artist = &*c_artist;
  16. let name = artist.get()
  17. .map(|metadata| metadata.name.clone())
  18. .unwrap_or("".to_owned());
  19. let name = CString::new(name).unwrap();
  20. let c_name = name.as_ptr();
  21. // FIXME
  22. mem::forget(name);
  23. c_name
  24. }