#![cfg(target_os = "macos")]
use {
objc::{class, msg_send, runtime::Object, sel, sel_impl, MessageError},
objc_id::Id,
objc_foundation::{INSString, NSString},
};
#[link(name = "AppKit", kind = "framework")]
extern "C" {
static NSPasteboardTypeString: *const Object;
}
const TYPE_STRING: &str = "org.nspasteboard.ConcealedType";
pub fn text<S: AsRef<str>>(s: S) -> Result<(), MessageError> {
unsafe { text_impl(s.as_ref()) }
}
#[inline]
unsafe fn text_impl(s: &str) -> Result<(), MessageError> {
#[allow(non_snake_case)]
let NSPasteboard = class!(NSPasteboard);
let pasteboard: Id<Object> = msg_send![NSPasteboard, generalPasteboard];
let nss_s: Id<NSString> = NSString::from_str(s);
let nss_type: Id<NSString> = NSString::from_str(TYPE_STRING);
let _: () = msg_send![pasteboard, clearContents];
let _: () = msg_send![pasteboard, setString: NSString::from_str("secret") forType: nss_type];
let _: () = msg_send![pasteboard, setString: nss_s forType: NSPasteboardTypeString];
Ok(())
}