Guest User

Untitled

a guest
Feb 23rd, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.95 KB | None | 0 0
  1. diff --git a/src/awesome/object.rs b/src/awesome/object.rs
  2. index 9caf9e6..f3015c2 100644
  3. --- a/src/awesome/object.rs
  4. +++ b/src/awesome/object.rs
  5. @@ -11,12 +11,12 @@ use super::property::Property;
  6. /// All Lua objects can be cast to this.
  7. #[derive(Clone, Debug)]
  8. pub struct Object<'lua> {
  9. - table: Table<'lua>
  10. + object: AnyUserData<'lua>
  11. }
  12.  
  13. -impl <'lua> From<Table<'lua>> for Object<'lua> {
  14. - fn from(table: Table<'lua>) -> Self {
  15. - Object { table }
  16. +impl <'lua> From<AnyUserData<'lua>> for Object<'lua> {
  17. + fn from(object: AnyUserData<'lua>) -> Self {
  18. + Object { object }
  19. }
  20. }
  21.  
  22. @@ -132,10 +132,13 @@ pub trait Objectable<'lua, T, S: UserData + Default + Display + Clone> {
  23. __metatable = {}
  24. }
  25. */
  26. - let object = S::default();
  27. + let object = match S::default().to_lua(lua)? {
  28. + rlua::Value::UserData(data) => data,
  29. + _ => unreachable!()
  30. + };
  31. // TODO Increment the instance count
  32. let wrapper_table = lua.create_table()?;
  33. - wrapper_table.set("userdata", object)?;
  34. + //wrapper_table.set("userdata", object)?;
  35. let data_table = lua.create_table()?;
  36. wrapper_table.set("data", data_table)?;
  37. let meta = lua.create_table()?;
  38. @@ -153,8 +156,9 @@ pub trait Objectable<'lua, T, S: UserData + Default + Display + Clone> {
  39. Ok(format!("{}", wrapper_table.get::<_, S>("userdata")?))
  40. })?)?;
  41. wrapper_table.set_metatable(Some(meta));
  42. + object.set_user_value(wrapper_table);
  43. // TODO Emit new signal event
  44. - let object = Object { table: wrapper_table };
  45. + let object = Object { object };
  46. Ok(ObjectBuilder { object, lua })
  47. }
  48. }
  49. @@ -166,33 +170,12 @@ impl <'lua> ToLua<'lua> for Object<'lua> {
  50. }
  51.  
  52. impl <'lua> Object<'lua> {
  53. - /// Coerces a concrete object into a generic object.
  54. - ///
  55. - /// This requires a check to ensure data integrity, and it's often useless.
  56. - /// Please don't use this method unless you need to.
  57. - #[allow(dead_code)]
  58. - #[deprecated]
  59. - pub fn to_object<T, S, O>(obj: O) -> Self
  60. - where S: Default + Display + Clone + UserData,
  61. - O: Objectable<'lua, T, S>
  62. - {
  63. - let table = obj.get_table();
  64. - assert!(table.contains_key("userdata")
  65. - .expect("Could not get userdata field of object wrapper table"),
  66. - "Table did not have special \"userdata\" field");
  67. - assert!(table.contains_key("data")
  68. - .expect("Could not get data field of object wrapper table"),
  69. - "Table did not have special \"data\" field"
  70. - );
  71. - Object { table }
  72. - }
  73. -
  74. pub fn signals(&self) -> rlua::Result<rlua::Table<'lua>> {
  75. self.table.get::<_, Table>("signals")
  76. }
  77.  
  78. - pub fn table(self) -> rlua::Table<'lua> {
  79. - self.table
  80. + pub fn table(&self) -> rlua::Result<Table<'lua>> {
  81. + self.object.get_user_value::<Table<'lua>>()
  82. }
  83. }
Add Comment
Please, Sign In to add comment