From 91e988f72217eefa1e82198b3b097b4130237650 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hans=20M=C3=BCndelein?= Date: Wed, 17 May 2023 18:30:26 +0200 Subject: [PATCH] Add initial draft for core First attempt for common types and the graphql schema --- .gitignore | 1 + Cargo.toml | 2 + Draft.rnote | Bin 0 -> 92376 bytes crabidy-core/Cargo.toml | 24 + crabidy-core/build.rs | 32 + crabidy-core/src/lib.rs | 328 ++++++++ crabidy-core/src/query.graphql | 3 + crabidy-core/src/query.rs | 35 + crabidy-core/src/schema.graphql | 81 ++ crabidy-core/src/schema.json | 1386 +++++++++++++++++++++++++++++++ 10 files changed, 1892 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.toml create mode 100644 Draft.rnote create mode 100644 crabidy-core/Cargo.toml create mode 100644 crabidy-core/build.rs create mode 100644 crabidy-core/src/lib.rs create mode 100644 crabidy-core/src/query.graphql create mode 100644 crabidy-core/src/query.rs create mode 100644 crabidy-core/src/schema.graphql create mode 100644 crabidy-core/src/schema.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..3ddfe6e --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,2 @@ +[workspace] +members = ["crabidy-core"] diff --git a/Draft.rnote b/Draft.rnote new file mode 100644 index 0000000000000000000000000000000000000000..0d7c3baaabe377b4b4cd8c85719c352644bc4546 GIT binary patch literal 92376 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 literal 0 HcmV?d00001 diff --git a/crabidy-core/Cargo.toml b/crabidy-core/Cargo.toml new file mode 100644 index 0000000..12d3a9c --- /dev/null +++ b/crabidy-core/Cargo.toml @@ -0,0 +1,24 @@ +[package] +name = "crabidy-core" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +async-trait = "0.1.68" +futures = "0.3.28" +graphql_client = "0.12.0" +juniper = { git = "https://github.com/graphql-rust/juniper.git", branch = "master" } +juniper_subscriptions = { git = "https://github.com/graphql-rust/juniper.git", branch = "master" } +serde = "1.0.163" +# juniper = { version = "0.16.0", features = ["serde_json"] } + +[build-dependencies] +async-trait = "0.1.68" +futures = "0.3.28" +graphql_client = "0.12.0" +juniper = { git = "https://github.com/graphql-rust/juniper.git", branch = "master" } +juniper_subscriptions = { git = "https://github.com/graphql-rust/juniper.git", branch = "master" } +serde = "1.0.163" +# juniper = { version = "0.16.0", features = ["serde_json"] } diff --git a/crabidy-core/build.rs b/crabidy-core/build.rs new file mode 100644 index 0000000..3f77842 --- /dev/null +++ b/crabidy-core/build.rs @@ -0,0 +1,32 @@ +use juniper::{EmptyMutation, EmptySubscription, IntrospectionFormat}; +use std::fs::File; +use std::io::prelude::*; + +#[path = "src/lib.rs"] +mod lib; + +fn main() { + // let (res, _errors) = juniper::introspect( + // &lib::Schema::new( + // lib::ItemList::new(), + // lib::Queue::new(), + // lib::Subscription::new(), + // ), + // &(), + // IntrospectionFormat::default(), + // ) + // .unwrap(); + // let mut file = File::create("src/schema.json").unwrap(); + // let json_result = serde_json::to_string_pretty(&res).unwrap(); + // file.write_all(json_result.as_bytes()).unwrap(); + + let schema = lib::Schema::new( + lib::ItemList::new(), + lib::Mutation::new(), + lib::Subscription::new(), + ); + let schema_str = schema.as_schema_language(); + + let mut file = File::create("src/schema.graphql").unwrap(); + file.write_all(schema_str.as_bytes()).unwrap(); +} diff --git a/crabidy-core/src/lib.rs b/crabidy-core/src/lib.rs new file mode 100644 index 0000000..e15967e --- /dev/null +++ b/crabidy-core/src/lib.rs @@ -0,0 +1,328 @@ +use async_trait::async_trait; +use futures::Stream; +use juniper::{ + graphql_object, graphql_subscription, FieldError, FieldResult, GraphQLEnum, GraphQLInputObject, + GraphQLObject, RootNode, +}; +use std::{collections::HashMap, pin::Pin, sync::Arc}; + +#[async_trait] +pub trait ProviderClient: Send + Sync { + async fn get_urls_for_track(&self, track_uuid: &str) -> Result, ProviderError>; + async fn get_item_lists_full(&self) -> Result, ProviderError>; + async fn get_item_lists_partial( + &self, + list_uuid: String, + ) -> Result, ProviderError>; + async fn get_item_list_partial_without_children( + &self, + list_uuid: String, + ) -> Result; +} + +#[derive(Clone, Debug, Hash)] +pub enum ProviderError { + UnknownUser, + FetchError, +} + +#[derive(Clone, Debug)] +pub struct ItemList { + pub name: String, + pub uuid: String, + pub provider: String, + pub tracks: Option>, + pub children: Option>, + pub is_queable: bool, + without_children: bool, +} + +#[graphql_object(context = Context)] +impl ItemList { + fn name(&self) -> &str { + &self.name + } + fn uuid(&self) -> &str { + &self.uuid + } + fn provider(&self) -> &str { + &self.provider + } + //TODO: Be smarter than clone here + fn tracks(&self, refresh: bool) -> Option> { + self.tracks.clone() + } + //TODO: Be smarter than clone here + fn children(&self, refresh: bool) -> Option> { + self.children.clone() + } + fn is_queable(&self) -> bool { + self.is_queable + } +} + +impl ItemList { + pub fn new() -> Self { + Self { + name: "root".to_string(), + uuid: "root".to_string(), + provider: "root".to_string(), + tracks: None, + children: None, + is_queable: false, + without_children: true, + } + } + pub fn flatten(&self) -> Vec { + let mut tracks = Vec::new(); + if let Some(own_tracks) = &self.tracks { + tracks.extend(own_tracks.clone()); + } + if let Some(childs) = &self.children { + for child in childs { + tracks.extend(child.flatten()); + } + } + tracks + } +} + +#[derive(Clone, Debug, GraphQLEnum)] +enum PlayState { + Buffering, + Playing, + Paused, + Stopped, +} + +#[derive(Clone, Debug, GraphQLObject)] +pub struct Track { + pub title: String, + pub uuid: String, + pub duration: Option, + pub album: Option, + pub artist: Option, + pub provider: String, +} + +#[derive(Clone, Debug, GraphQLInputObject)] +pub struct InputTrack { + pub uuid: String, + pub provider: String, +} + +#[derive(Clone, Debug, GraphQLObject)] +pub struct Album { + pub title: String, + pub release_date: Option, +} + +#[derive(Clone, Debug, GraphQLObject)] +pub struct Artist { + pub name: String, +} + +#[derive(Clone, Debug, Hash)] +pub enum QueueError { + ItemListNotQueuable, +} + +#[derive(Clone, Debug, GraphQLObject)] +pub struct Queue { + pub tracks: Vec, + current: i32, +} + +impl Queue { + pub fn new() -> Self { + Self { + tracks: vec![], + current: 0, + } + } + + pub fn clear(&mut self) { + self.current = 0; + self.tracks = vec![]; + } + + pub fn replace_with_track(&mut self, track: Track) { + self.current = 0; + self.tracks = vec![track]; + } + + pub fn replace_with_item_list(&mut self, item_list: &ItemList) -> Result<(), QueueError> { + if !item_list.is_queable { + return Err(QueueError::ItemListNotQueuable); + }; + self.current = 0; + self.tracks = item_list.flatten(); + Ok(()) + } + + pub fn set_current(&mut self, current: usize) -> bool { + if current < self.tracks.len() { + self.current = current as i32; + true + } else { + false + } + } + + pub fn current(&self) -> Option<&Track> { + self.tracks.get(self.current as usize) + } + + pub fn next(&mut self) -> Option<&Track> { + if (self.current as usize) < self.tracks.len() { + self.current += 1; + Some(&self.tracks[(self.current - 1) as usize]) + } else { + None + } + } + + pub fn previous(&mut self) -> Option<&Track> { + if self.current > 0 { + self.current -= 1; + Some(&self.tracks[self.current as usize]) + } else { + None + } + } + + pub fn append_track(&mut self, track: Track) { + self.tracks.push(track); + } + + pub fn append_playlist(&mut self, playlist: &[Track]) { + self.tracks.extend(playlist.to_vec()); + } + + pub fn queue_track(&mut self, track: Track) { + self.tracks.insert(self.current as usize, track); + } + + pub fn queue_playlist(&mut self, playlist: &[Track]) { + let tail: Vec = self + .tracks + .splice((self.current as usize).., playlist.to_vec()) + .collect(); + self.tracks.extend(tail); + } +} + +#[derive(Clone, Debug)] +pub struct Mutation; + +impl Mutation { + pub fn new() -> Self { + Self + } +} + +#[graphql_object(context = Context)] +impl Mutation { + fn playpause(&self, track: InputTrack) -> FieldResult { + Ok(ActiveTrack::new()) + } + fn stop(&self, track: InputTrack) -> FieldResult { + Ok(ActiveTrack::new()) + } + fn previous(&self, track: InputTrack) -> FieldResult { + Ok(ActiveTrack::new()) + } + fn next(&self, track: InputTrack) -> FieldResult { + Ok(ActiveTrack::new()) + } + fn seek(&self, track: InputTrack, millis: i32) -> FieldResult { + Ok(ActiveTrack::new()) + } + fn append(&self, tracks: Vec) -> FieldResult { + Ok(Success::Appending) + } + fn queue(&self, tracks: Vec) -> FieldResult { + Ok(Success::Queuing) + } + fn replace(&self, tracks: Vec) -> FieldResult { + Ok(Success::Replacing) + } + fn delete(&self, track: InputTrack) -> FieldResult { + Ok(Success::Deleting) + } + fn clear(&self, track: InputTrack) -> FieldResult { + Ok(Success::Clearing) + } +} + +#[derive(Clone, Debug, GraphQLEnum)] +enum Success { + Appending, + Replacing, + Queuing, + Deleting, + Clearing, +} + +#[derive(Clone, Debug, GraphQLObject)] +pub struct ActiveTrack { + track: Option, + completion: i32, + play_state: PlayState, +} + +impl ActiveTrack { + pub fn new() -> Self { + Self { + track: None, + completion: 0, + play_state: PlayState::Stopped, + } + } +} + +type ActiveTrackStream = Pin> + Send>>; +type QueueStream = Pin> + Send>>; + +#[derive(Clone, Debug)] +pub struct Subscription { + queue: Queue, + active_track: Option, +} + +#[graphql_subscription(context = Context)] +impl Subscription { + async fn queue() -> QueueStream { + let stream = futures::stream::iter(vec![Ok(Queue::new())]); + Box::pin(stream) + } + async fn active_track() -> ActiveTrackStream { + let stream = futures::stream::iter(vec![Ok(ActiveTrack::new())]); + Box::pin(stream) + } +} + +impl Subscription { + pub fn new() -> Self { + Self { + queue: Queue::new(), + active_track: None, + } + } +} + +pub struct Context { + clients: HashMap>, + queue: Queue, +} + +impl Context { + pub fn new(clients: HashMap>) -> Self { + let queue = Queue::new(); + Self { clients, queue } + } +} + +impl juniper::Context for Context {} + +pub type Schema = RootNode<'static, ItemList, Mutation, Subscription>; diff --git a/crabidy-core/src/query.graphql b/crabidy-core/src/query.graphql new file mode 100644 index 0000000..748d839 --- /dev/null +++ b/crabidy-core/src/query.graphql @@ -0,0 +1,3 @@ +query ItemList { + name +} diff --git a/crabidy-core/src/query.rs b/crabidy-core/src/query.rs new file mode 100644 index 0000000..390fcb3 --- /dev/null +++ b/crabidy-core/src/query.rs @@ -0,0 +1,35 @@ +#![allow(clippy::all, warnings)] +pub struct ItemList; +pub mod item_list { + #![allow(dead_code)] + use std::result::Result; + pub const OPERATION_NAME: &str = "ItemList"; + pub const QUERY: &str = "query ItemList {\n name\n}\n"; + use super::*; + use serde::{Deserialize, Serialize}; + #[allow(dead_code)] + type Boolean = bool; + #[allow(dead_code)] + type Float = f64; + #[allow(dead_code)] + type Int = i64; + #[allow(dead_code)] + type ID = String; + #[derive(Serialize)] + pub struct Variables; + #[derive(Deserialize)] + pub struct ResponseData { + pub name: String, + } +} +impl graphql_client::GraphQLQuery for ItemList { + type Variables = item_list::Variables; + type ResponseData = item_list::ResponseData; + fn build_query(variables: Self::Variables) -> ::graphql_client::QueryBody { + graphql_client::QueryBody { + variables, + query: item_list::QUERY, + operation_name: item_list::OPERATION_NAME, + } + } +} diff --git a/crabidy-core/src/schema.graphql b/crabidy-core/src/schema.graphql new file mode 100644 index 0000000..ed3faae --- /dev/null +++ b/crabidy-core/src/schema.graphql @@ -0,0 +1,81 @@ +type Queue { + tracks: [Track!]! + current: Int! +} + +type Mutation { + playpause(track: InputTrack!): ActiveTrack! + stop(track: InputTrack!): ActiveTrack! + previous(track: InputTrack!): ActiveTrack! + next(track: InputTrack!): ActiveTrack! + seek(track: InputTrack!, millis: Int!): ActiveTrack! + append(tracks: [InputTrack!]!): Success! + queue(tracks: [InputTrack!]!): Success! + replace(tracks: [InputTrack!]!): Success! + delete(track: InputTrack!): Success! + clear(track: InputTrack!): Success! +} + +type Album { + title: String! + releaseDate: String +} + +enum PlayState { + BUFFERING + PLAYING + PAUSED + STOPPED +} + +type Subscription { + queue: Queue! + activeTrack: ActiveTrack! +} + +type Artist { + name: String! +} + +type ActiveTrack { + track: Track + completion: Int! + playState: PlayState! +} + +type ItemList { + name: String! + uuid: String! + provider: String! + tracks(refresh: Boolean!): [Track!] + children(refresh: Boolean!): [ItemList!] + isQueable: Boolean! +} + +type Track { + title: String! + uuid: String! + duration: Int + album: Album + artist: Artist + provider: String! +} + +enum Success { + APPENDING + REPLACING + QUEUING + DELETING + CLEARING +} + +input InputTrack { + uuid: String! + provider: String! +} + +schema { + query: ItemList + mutation: Mutation + subscription: Subscription +} diff --git a/crabidy-core/src/schema.json b/crabidy-core/src/schema.json new file mode 100644 index 0000000..7c35a90 --- /dev/null +++ b/crabidy-core/src/schema.json @@ -0,0 +1,1386 @@ +{ + "__schema": { + "description": null, + "queryType": { + "name": "ItemList" + }, + "mutationType": { + "name": "Queue" + }, + "subscriptionType": { + "name": "Subscription" + }, + "types": [ + { + "kind": "SCALAR", + "name": "Boolean", + "description": null, + "specifiedByUrl": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "__InputValue", + "description": null, + "specifiedByUrl": null, + "fields": [ + { + "name": "name", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "defaultValue", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "String", + "description": null, + "specifiedByUrl": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Queue", + "description": null, + "specifiedByUrl": null, + "fields": [ + { + "name": "tracks", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Track", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "current", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "__Field", + "description": null, + "specifiedByUrl": null, + "fields": [ + { + "name": "name", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "args", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__InputValue", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "type", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "isDeprecated", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deprecationReason", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Album", + "description": null, + "specifiedByUrl": null, + "fields": [ + { + "name": "title", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "releaseDate", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "__TypeKind", + "description": "GraphQL type kind\n\nThe GraphQL specification defines a number of type kinds - the meta type of a type.", + "specifiedByUrl": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "SCALAR", + "description": "## Scalar types\n\nScalar types appear as the leaf nodes of GraphQL queries. Strings, numbers, and booleans are the built in types, and while it's possible to define your own, it's relatively uncommon.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "OBJECT", + "description": "## Object types\n\nThe most common type to be implemented by users. Objects have fields and can implement interfaces.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "INTERFACE", + "description": "## Interface types\n\nInterface types are used to represent overlapping fields between multiple types, and can be queried for their concrete type.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "UNION", + "description": "## Union types\n\nUnions are similar to interfaces but can not contain any fields on their own.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ENUM", + "description": "## Enum types\n\nLike scalars, enum types appear as the leaf nodes of GraphQL queries.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "INPUT_OBJECT", + "description": "## Input objects\n\nRepresents complex values provided in queries _into_ the system.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "LIST", + "description": "## List types\n\nRepresent lists of other types. This library provides implementations for vectors and slices, but other Rust types can be extended to serve as GraphQL lists.", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "NON_NULL", + "description": "## Non-null types\n\nIn GraphQL, nullable types are the default. By putting a `!` after a type, it becomes non-nullable.", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "__Type", + "description": null, + "specifiedByUrl": null, + "fields": [ + { + "name": "name", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "specifiedByUrl", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "kind", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "__TypeKind", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "fields", + "description": null, + "args": [ + { + "name": "includeDeprecated", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": "false" + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Field", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ofType", + "description": null, + "args": [], + "type": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "inputFields", + "description": null, + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__InputValue", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "interfaces", + "description": null, + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "possibleTypes", + "description": null, + "args": [], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "enumValues", + "description": null, + "args": [ + { + "name": "includeDeprecated", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": "false" + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__EnumValue", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Subscription", + "description": null, + "specifiedByUrl": null, + "fields": [ + { + "name": "queue", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Queue", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "__Schema", + "description": null, + "specifiedByUrl": null, + "fields": [ + { + "name": "description", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "types", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "queryType", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mutationType", + "description": null, + "args": [], + "type": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "subscriptionType", + "description": null, + "args": [], + "type": { + "kind": "OBJECT", + "name": "__Type", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "directives", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__Directive", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "Int", + "description": null, + "specifiedByUrl": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Artist", + "description": null, + "specifiedByUrl": null, + "fields": [ + { + "name": "name", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "__EnumValue", + "description": null, + "specifiedByUrl": null, + "fields": [ + { + "name": "name", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "isDeprecated", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "deprecationReason", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "ItemList", + "description": null, + "specifiedByUrl": null, + "fields": [ + { + "name": "name", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "uuid", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "provider", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tracks", + "description": null, + "args": [ + { + "name": "refresh", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Track", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "children", + "description": null, + "args": [ + { + "name": "refresh", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "ItemList", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "isQueable", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "__DirectiveLocation", + "description": null, + "specifiedByUrl": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "QUERY", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "MUTATION", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "SUBSCRIPTION", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "FIELD", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "SCALAR", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "FRAGMENT_DEFINITION", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "FIELD_DEFINITION", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "VARIABLE_DEFINITION", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "FRAGMENT_SPREAD", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "INLINE_FRAGMENT", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ENUM_VALUE", + "description": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Track", + "description": null, + "specifiedByUrl": null, + "fields": [ + { + "name": "title", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "uuid", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "duration", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "album", + "description": null, + "args": [], + "type": { + "kind": "OBJECT", + "name": "Album", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "artist", + "description": null, + "args": [], + "type": { + "kind": "OBJECT", + "name": "Artist", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "provider", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "__Directive", + "description": null, + "specifiedByUrl": null, + "fields": [ + { + "name": "name", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "description", + "description": null, + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "locations", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "__DirectiveLocation", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "isRepeatable", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "args", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__InputValue", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "onOperation", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": true, + "deprecationReason": "Use the locations array instead" + }, + { + "name": "onFragment", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": true, + "deprecationReason": "Use the locations array instead" + }, + { + "name": "onField", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": true, + "deprecationReason": "Use the locations array instead" + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + } + ], + "directives": [ + { + "name": "include", + "description": null, + "isRepeatable": false, + "locations": [ + "FIELD", + "FRAGMENT_SPREAD", + "INLINE_FRAGMENT" + ], + "args": [ + { + "name": "if", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "defaultValue": null + } + ] + }, + { + "name": "deprecated", + "description": null, + "isRepeatable": false, + "locations": [ + "FIELD_DEFINITION", + "ENUM_VALUE" + ], + "args": [ + { + "name": "reason", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ] + }, + { + "name": "specifiedBy", + "description": null, + "isRepeatable": false, + "locations": [ + "SCALAR" + ], + "args": [ + { + "name": "url", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ] + }, + { + "name": "skip", + "description": null, + "isRepeatable": false, + "locations": [ + "FIELD", + "FRAGMENT_SPREAD", + "INLINE_FRAGMENT" + ], + "args": [ + { + "name": "if", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "defaultValue": null + } + ] + } + ] + } +} \ No newline at end of file