Added tables to database.
This commit is contained in:
		
							
								
								
									
										57
									
								
								src/lib.rs
									
									
									
									
									
								
							
							
						
						
									
										57
									
								
								src/lib.rs
									
									
									
									
									
								
							@@ -1,6 +1,23 @@
 | 
				
			|||||||
use async_graphql::{EmptyMutation, EmptySubscription, Object, Schema};
 | 
					use async_graphql::{EmptySubscription, Object, Result, Schema};
 | 
				
			||||||
use serde_json;
 | 
					use serde_json;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct Table {
 | 
				
			||||||
 | 
					    name: String,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl Table {
 | 
				
			||||||
 | 
					    async fn new(name: String) -> Self {
 | 
				
			||||||
 | 
					        Self { name: name }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[Object]
 | 
				
			||||||
 | 
					impl Table {
 | 
				
			||||||
 | 
					    async fn name(&self) -> String {
 | 
				
			||||||
 | 
					        self.name.to_string()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct Query;
 | 
					struct Query;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[Object]
 | 
					#[Object]
 | 
				
			||||||
@@ -8,17 +25,30 @@ impl Query {
 | 
				
			|||||||
    async fn pointless(&self) -> String {
 | 
					    async fn pointless(&self) -> String {
 | 
				
			||||||
        "this is pointless.".to_string()
 | 
					        "this is pointless.".to_string()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //async fn create_table(&self, name: String) -> Result<Option<Table>> {
 | 
				
			||||||
 | 
					    //    Ok(Some(Table::new(name).await))
 | 
				
			||||||
 | 
					    //}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct Mutation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[Object]
 | 
				
			||||||
 | 
					impl Mutation {
 | 
				
			||||||
 | 
					    async fn create_table(&self, name: String) -> Result<Option<Table>> {
 | 
				
			||||||
 | 
					        Ok(Some(Table::new(name).await))
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Clone)]
 | 
					#[derive(Clone)]
 | 
				
			||||||
pub struct Database {
 | 
					pub struct Database {
 | 
				
			||||||
    schema: Schema<Query, EmptyMutation, EmptySubscription>,
 | 
					    schema: Schema<Query, Mutation, EmptySubscription>,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl Database {
 | 
					impl Database {
 | 
				
			||||||
    pub fn new() -> Self {
 | 
					    pub fn new() -> Self {
 | 
				
			||||||
        Self {
 | 
					        Self {
 | 
				
			||||||
            schema: Schema::new(Query, EmptyMutation, EmptySubscription),
 | 
					            schema: Schema::new(Query, Mutation, EmptySubscription),
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -45,3 +75,24 @@ mod queries {
 | 
				
			|||||||
        )
 | 
					        )
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[cfg(test)]
 | 
				
			||||||
 | 
					mod mutations {
 | 
				
			||||||
 | 
					    use super::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[async_std::test]
 | 
				
			||||||
 | 
					    async fn add_table() {
 | 
				
			||||||
 | 
					        let db = Database::new();
 | 
				
			||||||
 | 
					        let output = db
 | 
				
			||||||
 | 
					            .execute(r#"mutation {createTable(name: "william"){name}}"#)
 | 
				
			||||||
 | 
					            .await;
 | 
				
			||||||
 | 
					        let expected = r#"{"data":{"createTable":{"name":"william"}}}"#;
 | 
				
			||||||
 | 
					        println!("{}", &db.schema.sdl());
 | 
				
			||||||
 | 
					        assert!(
 | 
				
			||||||
 | 
					            output == expected,
 | 
				
			||||||
 | 
					            "Got '{}' instead of '{}'.",
 | 
				
			||||||
 | 
					            output,
 | 
				
			||||||
 | 
					            expected
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user