A better Rust ATProto crate

Compare changes

Choose any two refs to compare.

Changed files
+10785
crates
jacquard-api
lexicons
src
+2
crates/jacquard-api/Cargo.toml
··· 37 app_blebbit = [] 38 app_bsky = [] 39 app_ocho = [] 40 beauty_cybernetic = [] 41 blog_pckt = [] 42 blue__2048 = [] ··· 62 moe_karashiiro = [] 63 my_skylights = [] 64 net_aftertheinter = [] 65 net_anisota = ["app_bsky"] 66 net_bnewbold = [] 67 net_mmatt = []
··· 37 app_blebbit = [] 38 app_bsky = [] 39 app_ocho = [] 40 + app_rocksky = [] 41 beauty_cybernetic = [] 42 blog_pckt = [] 43 blue__2048 = [] ··· 63 moe_karashiiro = [] 64 my_skylights = [] 65 net_aftertheinter = [] 66 + net_altq = [] 67 net_anisota = ["app_bsky"] 68 net_bnewbold = [] 69 net_mmatt = []
+78
crates/jacquard-api/lexicons/app_rocksky_actor_defs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.actor.defs", 4 + "defs": { 5 + "profileViewBasic": { 6 + "type": "object", 7 + "properties": { 8 + "avatar": { 9 + "type": "string", 10 + "description": "The URL of the actor's avatar image.", 11 + "format": "uri" 12 + }, 13 + "createdAt": { 14 + "type": "string", 15 + "description": "The date and time when the actor was created.", 16 + "format": "datetime" 17 + }, 18 + "did": { 19 + "type": "string", 20 + "description": "The DID of the actor." 21 + }, 22 + "displayName": { 23 + "type": "string", 24 + "description": "The display name of the actor." 25 + }, 26 + "handle": { 27 + "type": "string", 28 + "description": "The handle of the actor." 29 + }, 30 + "id": { 31 + "type": "string", 32 + "description": "The unique identifier of the actor." 33 + }, 34 + "updatedAt": { 35 + "type": "string", 36 + "description": "The date and time when the actor was last updated.", 37 + "format": "datetime" 38 + } 39 + } 40 + }, 41 + "profileViewDetailed": { 42 + "type": "object", 43 + "properties": { 44 + "avatar": { 45 + "type": "string", 46 + "description": "The URL of the actor's avatar image.", 47 + "format": "uri" 48 + }, 49 + "createdAt": { 50 + "type": "string", 51 + "description": "The date and time when the actor was created.", 52 + "format": "datetime" 53 + }, 54 + "did": { 55 + "type": "string", 56 + "description": "The DID of the actor." 57 + }, 58 + "displayName": { 59 + "type": "string", 60 + "description": "The display name of the actor." 61 + }, 62 + "handle": { 63 + "type": "string", 64 + "description": "The handle of the actor." 65 + }, 66 + "id": { 67 + "type": "string", 68 + "description": "The unique identifier of the actor." 69 + }, 70 + "updatedAt": { 71 + "type": "string", 72 + "description": "The date and time when the actor was last updated.", 73 + "format": "datetime" 74 + } 75 + } 76 + } 77 + } 78 + }
+48
crates/jacquard-api/lexicons/app_rocksky_actor_getActorAlbums.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.actor.getActorAlbums", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get albums for an actor", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "did" 12 + ], 13 + "properties": { 14 + "did": { 15 + "type": "string", 16 + "description": "The DID or handle of the actor", 17 + "format": "at-identifier" 18 + }, 19 + "limit": { 20 + "type": "integer", 21 + "description": "The maximum number of albums to return", 22 + "minimum": 1 23 + }, 24 + "offset": { 25 + "type": "integer", 26 + "description": "The offset for pagination", 27 + "minimum": 0 28 + } 29 + } 30 + }, 31 + "output": { 32 + "encoding": "application/json", 33 + "schema": { 34 + "type": "object", 35 + "properties": { 36 + "albums": { 37 + "type": "array", 38 + "items": { 39 + "type": "ref", 40 + "ref": "app.rocksky.album.defs#albumViewBasic" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + } 47 + } 48 + }
+48
crates/jacquard-api/lexicons/app_rocksky_actor_getActorArtists.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.actor.getActorArtists", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get artists for an actor", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "did" 12 + ], 13 + "properties": { 14 + "did": { 15 + "type": "string", 16 + "description": "The DID or handle of the actor", 17 + "format": "at-identifier" 18 + }, 19 + "limit": { 20 + "type": "integer", 21 + "description": "The maximum number of albums to return", 22 + "minimum": 1 23 + }, 24 + "offset": { 25 + "type": "integer", 26 + "description": "The offset for pagination", 27 + "minimum": 0 28 + } 29 + } 30 + }, 31 + "output": { 32 + "encoding": "application/json", 33 + "schema": { 34 + "type": "object", 35 + "properties": { 36 + "artists": { 37 + "type": "array", 38 + "items": { 39 + "type": "ref", 40 + "ref": "app.rocksky.artist.defs#artistViewBasic" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + } 47 + } 48 + }
+48
crates/jacquard-api/lexicons/app_rocksky_actor_getActorLovedSongs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.actor.getActorLovedSongs", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get loved songs for an actor", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "did" 12 + ], 13 + "properties": { 14 + "did": { 15 + "type": "string", 16 + "description": "The DID or handle of the actor", 17 + "format": "at-identifier" 18 + }, 19 + "limit": { 20 + "type": "integer", 21 + "description": "The maximum number of albums to return", 22 + "minimum": 1 23 + }, 24 + "offset": { 25 + "type": "integer", 26 + "description": "The offset for pagination", 27 + "minimum": 0 28 + } 29 + } 30 + }, 31 + "output": { 32 + "encoding": "application/json", 33 + "schema": { 34 + "type": "object", 35 + "properties": { 36 + "tracks": { 37 + "type": "array", 38 + "items": { 39 + "type": "ref", 40 + "ref": "app.rocksky.song.defs#songViewBasic" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + } 47 + } 48 + }
+48
crates/jacquard-api/lexicons/app_rocksky_actor_getActorPlaylists.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.actor.getActorPlaylists", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get playlists for an actor", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "did" 12 + ], 13 + "properties": { 14 + "did": { 15 + "type": "string", 16 + "description": "The DID or handle of the actor", 17 + "format": "at-identifier" 18 + }, 19 + "limit": { 20 + "type": "integer", 21 + "description": "The maximum number of albums to return", 22 + "minimum": 1 23 + }, 24 + "offset": { 25 + "type": "integer", 26 + "description": "The offset for pagination", 27 + "minimum": 0 28 + } 29 + } 30 + }, 31 + "output": { 32 + "encoding": "application/json", 33 + "schema": { 34 + "type": "object", 35 + "properties": { 36 + "playlists": { 37 + "type": "array", 38 + "items": { 39 + "type": "ref", 40 + "ref": "app.rocksky.playlist.defs#playlistViewBasic" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + } 47 + } 48 + }
+48
crates/jacquard-api/lexicons/app_rocksky_actor_getActorScrobbles.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.actor.getActorScrobbles", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get scrobbles for an actor", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "did" 12 + ], 13 + "properties": { 14 + "did": { 15 + "type": "string", 16 + "description": "The DID or handle of the actor", 17 + "format": "at-identifier" 18 + }, 19 + "limit": { 20 + "type": "integer", 21 + "description": "The maximum number of albums to return", 22 + "minimum": 1 23 + }, 24 + "offset": { 25 + "type": "integer", 26 + "description": "The offset for pagination", 27 + "minimum": 0 28 + } 29 + } 30 + }, 31 + "output": { 32 + "encoding": "application/json", 33 + "schema": { 34 + "type": "object", 35 + "properties": { 36 + "scrobbles": { 37 + "type": "array", 38 + "items": { 39 + "type": "ref", 40 + "ref": "app.rocksky.scrobble.defs#scrobbleViewBasic" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + } 47 + } 48 + }
+48
crates/jacquard-api/lexicons/app_rocksky_actor_getActorSongs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.actor.getActorSongs", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get songs for an actor", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "did" 12 + ], 13 + "properties": { 14 + "did": { 15 + "type": "string", 16 + "description": "The DID or handle of the actor", 17 + "format": "at-identifier" 18 + }, 19 + "limit": { 20 + "type": "integer", 21 + "description": "The maximum number of albums to return", 22 + "minimum": 1 23 + }, 24 + "offset": { 25 + "type": "integer", 26 + "description": "The offset for pagination", 27 + "minimum": 0 28 + } 29 + } 30 + }, 31 + "output": { 32 + "encoding": "application/json", 33 + "schema": { 34 + "type": "object", 35 + "properties": { 36 + "songs": { 37 + "type": "array", 38 + "items": { 39 + "type": "ref", 40 + "ref": "app.rocksky.song.defs#songViewBasic" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + } 47 + } 48 + }
+27
crates/jacquard-api/lexicons/app_rocksky_actor_getProfile.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.actor.getProfile", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get the profile of an actor", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "did": { 12 + "type": "string", 13 + "description": "The DID or handle of the actor", 14 + "format": "at-identifier" 15 + } 16 + } 17 + }, 18 + "output": { 19 + "encoding": "application/json", 20 + "schema": { 21 + "type": "ref", 22 + "ref": "app.rocksky.actor.defs#profileViewDetailed" 23 + } 24 + } 25 + } 26 + } 27 + }
+94
crates/jacquard-api/lexicons/app_rocksky_album.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.album", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "A declaration of an album.", 8 + "key": "tid", 9 + "record": { 10 + "type": "object", 11 + "required": [ 12 + "title", 13 + "artist", 14 + "createdAt" 15 + ], 16 + "properties": { 17 + "albumArt": { 18 + "type": "blob", 19 + "description": "The album art of the album.", 20 + "accept": [ 21 + "image/png", 22 + "image/jpeg" 23 + ], 24 + "maxSize": 2000000 25 + }, 26 + "appleMusicLink": { 27 + "type": "string", 28 + "description": "The Apple Music link of the album.", 29 + "format": "uri" 30 + }, 31 + "artist": { 32 + "type": "string", 33 + "description": "The artist of the album.", 34 + "minLength": 1, 35 + "maxLength": 256 36 + }, 37 + "createdAt": { 38 + "type": "string", 39 + "description": "The date and time when the album was created.", 40 + "format": "datetime" 41 + }, 42 + "duration": { 43 + "type": "integer", 44 + "description": "The duration of the album in seconds." 45 + }, 46 + "genre": { 47 + "type": "string", 48 + "description": "The genre of the album.", 49 + "maxLength": 256 50 + }, 51 + "releaseDate": { 52 + "type": "string", 53 + "description": "The release date of the album.", 54 + "format": "datetime" 55 + }, 56 + "spotifyLink": { 57 + "type": "string", 58 + "description": "The Spotify link of the album.", 59 + "format": "uri" 60 + }, 61 + "tags": { 62 + "type": "array", 63 + "description": "The tags of the album.", 64 + "items": { 65 + "type": "string", 66 + "minLength": 1, 67 + "maxLength": 256 68 + } 69 + }, 70 + "tidalLink": { 71 + "type": "string", 72 + "description": "The tidal link of the album.", 73 + "format": "uri" 74 + }, 75 + "title": { 76 + "type": "string", 77 + "description": "The title of the album.", 78 + "minLength": 1, 79 + "maxLength": 512 80 + }, 81 + "year": { 82 + "type": "integer", 83 + "description": "The year the album was released." 84 + }, 85 + "youtubeLink": { 86 + "type": "string", 87 + "description": "The YouTube link of the album.", 88 + "format": "uri" 89 + } 90 + } 91 + } 92 + } 93 + } 94 + }
+121
crates/jacquard-api/lexicons/app_rocksky_album_defs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.album.defs", 4 + "defs": { 5 + "albumViewBasic": { 6 + "type": "object", 7 + "properties": { 8 + "albumArt": { 9 + "type": "string", 10 + "description": "The URL of the album art image.", 11 + "format": "uri" 12 + }, 13 + "artist": { 14 + "type": "string", 15 + "description": "The artist of the album." 16 + }, 17 + "artistUri": { 18 + "type": "string", 19 + "description": "The URI of the album's artist.", 20 + "format": "at-uri" 21 + }, 22 + "id": { 23 + "type": "string", 24 + "description": "The unique identifier of the album." 25 + }, 26 + "playCount": { 27 + "type": "integer", 28 + "description": "The number of times the album has been played.", 29 + "minimum": 0 30 + }, 31 + "releaseDate": { 32 + "type": "string", 33 + "description": "The release date of the album." 34 + }, 35 + "sha256": { 36 + "type": "string", 37 + "description": "The SHA256 hash of the album." 38 + }, 39 + "title": { 40 + "type": "string", 41 + "description": "The title of the album." 42 + }, 43 + "uniqueListeners": { 44 + "type": "integer", 45 + "description": "The number of unique listeners who have played the album.", 46 + "minimum": 0 47 + }, 48 + "uri": { 49 + "type": "string", 50 + "description": "The URI of the album.", 51 + "format": "at-uri" 52 + }, 53 + "year": { 54 + "type": "integer", 55 + "description": "The year the album was released." 56 + } 57 + } 58 + }, 59 + "albumViewDetailed": { 60 + "type": "object", 61 + "properties": { 62 + "albumArt": { 63 + "type": "string", 64 + "description": "The URL of the album art image.", 65 + "format": "uri" 66 + }, 67 + "artist": { 68 + "type": "string", 69 + "description": "The artist of the album." 70 + }, 71 + "artistUri": { 72 + "type": "string", 73 + "description": "The URI of the album's artist.", 74 + "format": "at-uri" 75 + }, 76 + "id": { 77 + "type": "string", 78 + "description": "The unique identifier of the album." 79 + }, 80 + "playCount": { 81 + "type": "integer", 82 + "description": "The number of times the album has been played.", 83 + "minimum": 0 84 + }, 85 + "releaseDate": { 86 + "type": "string", 87 + "description": "The release date of the album." 88 + }, 89 + "sha256": { 90 + "type": "string", 91 + "description": "The SHA256 hash of the album." 92 + }, 93 + "title": { 94 + "type": "string", 95 + "description": "The title of the album." 96 + }, 97 + "tracks": { 98 + "type": "array", 99 + "items": { 100 + "type": "ref", 101 + "ref": "app.rocksky.song.defs.songViewBasic" 102 + } 103 + }, 104 + "uniqueListeners": { 105 + "type": "integer", 106 + "description": "The number of unique listeners who have played the album.", 107 + "minimum": 0 108 + }, 109 + "uri": { 110 + "type": "string", 111 + "description": "The URI of the album.", 112 + "format": "at-uri" 113 + }, 114 + "year": { 115 + "type": "integer", 116 + "description": "The year the album was released." 117 + } 118 + } 119 + } 120 + } 121 + }
+30
crates/jacquard-api/lexicons/app_rocksky_album_getAlbum.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.album.getAlbum", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get detailed album view", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "uri": { 15 + "type": "string", 16 + "description": "The URI of the album to retrieve.", 17 + "format": "at-uri" 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "ref", 25 + "ref": "app.rocksky.album.defs#albumViewDetailed" 26 + } 27 + } 28 + } 29 + } 30 + }
+38
crates/jacquard-api/lexicons/app_rocksky_album_getAlbumTracks.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.album.getAlbumTracks", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get tracks for an album", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "uri": { 15 + "type": "string", 16 + "description": "The URI of the album to retrieve tracks from", 17 + "format": "at-uri" 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "object", 25 + "properties": { 26 + "tracks": { 27 + "type": "array", 28 + "items": { 29 + "type": "ref", 30 + "ref": "app.rocksky.song.defs#songViewBasic" 31 + } 32 + } 33 + } 34 + } 35 + } 36 + } 37 + } 38 + }
+40
crates/jacquard-api/lexicons/app_rocksky_album_getAlbums.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.album.getAlbums", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get albums", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "limit": { 12 + "type": "integer", 13 + "description": "The maximum number of albums to return", 14 + "minimum": 1 15 + }, 16 + "offset": { 17 + "type": "integer", 18 + "description": "The offset for pagination", 19 + "minimum": 0 20 + } 21 + } 22 + }, 23 + "output": { 24 + "encoding": "application/json", 25 + "schema": { 26 + "type": "object", 27 + "properties": { 28 + "albums": { 29 + "type": "array", 30 + "items": { 31 + "type": "ref", 32 + "ref": "app.rocksky.album.defs#albumViewBasic" 33 + } 34 + } 35 + } 36 + } 37 + } 38 + } 39 + } 40 + }
+36
crates/jacquard-api/lexicons/app_rocksky_apikey_createApikey.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.apikey.createApikey", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Create a new API key for the authenticated user", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": [ 13 + "name" 14 + ], 15 + "properties": { 16 + "description": { 17 + "type": "string", 18 + "description": "A description for the API key." 19 + }, 20 + "name": { 21 + "type": "string", 22 + "description": "The name of the API key." 23 + } 24 + } 25 + } 26 + }, 27 + "output": { 28 + "encoding": "application/json", 29 + "schema": { 30 + "type": "ref", 31 + "ref": "app.rocksky.apikey.defs#apiKey" 32 + } 33 + } 34 + } 35 + } 36 + }
+28
crates/jacquard-api/lexicons/app_rocksky_apikey_defs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.apikey.defs", 4 + "defs": { 5 + "apiKeyView": { 6 + "type": "object", 7 + "properties": { 8 + "createdAt": { 9 + "type": "string", 10 + "description": "The date and time when the API key was created.", 11 + "format": "datetime" 12 + }, 13 + "description": { 14 + "type": "string", 15 + "description": "A description for the API key." 16 + }, 17 + "id": { 18 + "type": "string", 19 + "description": "The unique identifier of the API key." 20 + }, 21 + "name": { 22 + "type": "string", 23 + "description": "The name of the API key." 24 + } 25 + } 26 + } 27 + } 28 + }
+38
crates/jacquard-api/lexicons/app_rocksky_apikey_getApikeys.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.apikey.getApikeys", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get a list of API keys for the authenticated user", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "limit": { 12 + "type": "integer", 13 + "description": "The number of API keys to return per page." 14 + }, 15 + "offset": { 16 + "type": "integer", 17 + "description": "The number of API keys to skip before starting to collect the result set." 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "object", 25 + "properties": { 26 + "apiKeys": { 27 + "type": "array", 28 + "items": { 29 + "type": "ref", 30 + "ref": "app.rocksky.apikey.defs#apikeyView" 31 + } 32 + } 33 + } 34 + } 35 + } 36 + } 37 + } 38 + }
+29
crates/jacquard-api/lexicons/app_rocksky_apikey_removeApikey.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.apikey.removeApikey", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Remove an API key for the authenticated user", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "id" 12 + ], 13 + "properties": { 14 + "id": { 15 + "type": "string", 16 + "description": "The ID of the API key to remove." 17 + } 18 + } 19 + }, 20 + "output": { 21 + "encoding": "application/json", 22 + "schema": { 23 + "type": "ref", 24 + "ref": "app.rocksky.apikey.defs#apiKey" 25 + } 26 + } 27 + } 28 + } 29 + }
+41
crates/jacquard-api/lexicons/app_rocksky_apikey_updateApikey.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.apikey.updateApikey", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Update an existing API key for the authenticated user", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": [ 13 + "id", 14 + "name" 15 + ], 16 + "properties": { 17 + "description": { 18 + "type": "string", 19 + "description": "A new description for the API key." 20 + }, 21 + "id": { 22 + "type": "string", 23 + "description": "The ID of the API key to update." 24 + }, 25 + "name": { 26 + "type": "string", 27 + "description": "The new name of the API key." 28 + } 29 + } 30 + } 31 + }, 32 + "output": { 33 + "encoding": "application/json", 34 + "schema": { 35 + "type": "ref", 36 + "ref": "app.rocksky.apikey.defs#apiKey" 37 + } 38 + } 39 + } 40 + } 41 + }
+5
crates/jacquard-api/lexicons/app_rocksky_apikeys_defs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.apikeys.defs", 4 + "defs": {} 5 + }
+69
crates/jacquard-api/lexicons/app_rocksky_artist.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.artist", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "A declaration of an artist.", 8 + "key": "tid", 9 + "record": { 10 + "type": "object", 11 + "required": [ 12 + "name", 13 + "createdAt" 14 + ], 15 + "properties": { 16 + "bio": { 17 + "type": "string", 18 + "description": "The biography of the artist.", 19 + "maxLength": 1000 20 + }, 21 + "born": { 22 + "type": "string", 23 + "description": "The birth date of the artist.", 24 + "format": "datetime" 25 + }, 26 + "bornIn": { 27 + "type": "string", 28 + "description": "The birth place of the artist.", 29 + "maxLength": 256 30 + }, 31 + "createdAt": { 32 + "type": "string", 33 + "description": "The date when the artist was created.", 34 + "format": "datetime" 35 + }, 36 + "died": { 37 + "type": "string", 38 + "description": "The death date of the artist.", 39 + "format": "datetime" 40 + }, 41 + "name": { 42 + "type": "string", 43 + "description": "The name of the artist.", 44 + "minLength": 1, 45 + "maxLength": 512 46 + }, 47 + "picture": { 48 + "type": "blob", 49 + "description": "The picture of the artist.", 50 + "accept": [ 51 + "image/png", 52 + "image/jpeg" 53 + ], 54 + "maxSize": 2000000 55 + }, 56 + "tags": { 57 + "type": "array", 58 + "description": "The tags of the artist.", 59 + "items": { 60 + "type": "string", 61 + "minLength": 1, 62 + "maxLength": 256 63 + } 64 + } 65 + } 66 + } 67 + } 68 + } 69 + }
+78
crates/jacquard-api/lexicons/app_rocksky_artist_defs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.artist.defs", 4 + "defs": { 5 + "artistViewBasic": { 6 + "type": "object", 7 + "properties": { 8 + "id": { 9 + "type": "string", 10 + "description": "The unique identifier of the artist." 11 + }, 12 + "name": { 13 + "type": "string", 14 + "description": "The name of the artist." 15 + }, 16 + "picture": { 17 + "type": "string", 18 + "description": "The picture of the artist." 19 + }, 20 + "playCount": { 21 + "type": "integer", 22 + "description": "The number of times the artist has been played.", 23 + "minimum": 0 24 + }, 25 + "sha256": { 26 + "type": "string", 27 + "description": "The SHA256 hash of the artist." 28 + }, 29 + "uniqueListeners": { 30 + "type": "integer", 31 + "description": "The number of unique listeners who have played the artist.", 32 + "minimum": 0 33 + }, 34 + "uri": { 35 + "type": "string", 36 + "description": "The URI of the artist.", 37 + "format": "at-uri" 38 + } 39 + } 40 + }, 41 + "artistViewDetailed": { 42 + "type": "object", 43 + "properties": { 44 + "id": { 45 + "type": "string", 46 + "description": "The unique identifier of the artist." 47 + }, 48 + "name": { 49 + "type": "string", 50 + "description": "The name of the artist." 51 + }, 52 + "picture": { 53 + "type": "string", 54 + "description": "The picture of the artist." 55 + }, 56 + "playCount": { 57 + "type": "integer", 58 + "description": "The number of times the artist has been played.", 59 + "minimum": 0 60 + }, 61 + "sha256": { 62 + "type": "string", 63 + "description": "The SHA256 hash of the artist." 64 + }, 65 + "uniqueListeners": { 66 + "type": "integer", 67 + "description": "The number of unique listeners who have played the artist.", 68 + "minimum": 0 69 + }, 70 + "uri": { 71 + "type": "string", 72 + "description": "The URI of the artist.", 73 + "format": "at-uri" 74 + } 75 + } 76 + } 77 + } 78 + }
+30
crates/jacquard-api/lexicons/app_rocksky_artist_getArtist.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.artist.getArtist", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get artist details", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "uri": { 15 + "type": "string", 16 + "description": "The URI of the artist to retrieve details from", 17 + "format": "at-uri" 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "ref", 25 + "ref": "app.rocksky.artist.defs#artistViewDetailed" 26 + } 27 + } 28 + } 29 + } 30 + }
+38
crates/jacquard-api/lexicons/app_rocksky_artist_getArtistAlbums.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.artist.getArtistAlbums", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get artist's albums", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "uri": { 15 + "type": "string", 16 + "description": "The URI of the artist to retrieve albums from", 17 + "format": "at-uri" 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "object", 25 + "properties": { 26 + "albums": { 27 + "type": "array", 28 + "items": { 29 + "type": "ref", 30 + "ref": "app.rocksky.album.defs#albumViewBasic" 31 + } 32 + } 33 + } 34 + } 35 + } 36 + } 37 + } 38 + }
+45
crates/jacquard-api/lexicons/app_rocksky_artist_getArtistTracks.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.artist.getArtistTracks", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get artist's tracks", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "limit": { 12 + "type": "integer", 13 + "description": "The maximum number of tracks to return", 14 + "minimum": 1 15 + }, 16 + "offset": { 17 + "type": "integer", 18 + "description": "The offset for pagination", 19 + "minimum": 0 20 + }, 21 + "uri": { 22 + "type": "string", 23 + "description": "The URI of the artist to retrieve albums from", 24 + "format": "at-uri" 25 + } 26 + } 27 + }, 28 + "output": { 29 + "encoding": "application/json", 30 + "schema": { 31 + "type": "object", 32 + "properties": { 33 + "tracks": { 34 + "type": "array", 35 + "items": { 36 + "type": "ref", 37 + "ref": "app.rocksky.song.defs#songViewBasic" 38 + } 39 + } 40 + } 41 + } 42 + } 43 + } 44 + } 45 + }
+40
crates/jacquard-api/lexicons/app_rocksky_artist_getArtists.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.artist.getArtists", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get artists", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "limit": { 12 + "type": "integer", 13 + "description": "The maximum number of artists to return", 14 + "minimum": 1 15 + }, 16 + "offset": { 17 + "type": "integer", 18 + "description": "The offset for pagination", 19 + "minimum": 0 20 + } 21 + } 22 + }, 23 + "output": { 24 + "encoding": "application/json", 25 + "schema": { 26 + "type": "object", 27 + "properties": { 28 + "artists": { 29 + "type": "array", 30 + "items": { 31 + "type": "ref", 32 + "ref": "app.rocksky.artist.defs#artistViewBasic" 33 + } 34 + } 35 + } 36 + } 37 + } 38 + } 39 + } 40 + }
+32
crates/jacquard-api/lexicons/app_rocksky_charts_defs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.charts.defs", 4 + "defs": { 5 + "chartsView": { 6 + "type": "object", 7 + "properties": { 8 + "scrobbles": { 9 + "type": "array", 10 + "items": { 11 + "type": "ref", 12 + "ref": "app.rocksky.charts.defs#scrobbleViewBasic" 13 + } 14 + } 15 + } 16 + }, 17 + "scrobbleViewBasic": { 18 + "type": "object", 19 + "properties": { 20 + "count": { 21 + "type": "integer", 22 + "description": "The number of scrobbles on this date." 23 + }, 24 + "date": { 25 + "type": "string", 26 + "description": "The date of the scrobble.", 27 + "format": "datetime" 28 + } 29 + } 30 + } 31 + } 32 + }
+42
crates/jacquard-api/lexicons/app_rocksky_charts_getScrobblesChart.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.charts.getScrobblesChart", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get the scrobbles chart", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "albumuri": { 12 + "type": "string", 13 + "description": "The URI of the album to filter by", 14 + "format": "at-uri" 15 + }, 16 + "artisturi": { 17 + "type": "string", 18 + "description": "The URI of the artist to filter by", 19 + "format": "at-uri" 20 + }, 21 + "did": { 22 + "type": "string", 23 + "description": "The DID or handle of the actor", 24 + "format": "at-identifier" 25 + }, 26 + "songuri": { 27 + "type": "string", 28 + "description": "The URI of the track to filter by", 29 + "format": "at-uri" 30 + } 31 + } 32 + }, 33 + "output": { 34 + "encoding": "application/json", 35 + "schema": { 36 + "type": "ref", 37 + "ref": "app.rocksky.charts.defs#chartsView" 38 + } 39 + } 40 + } 41 + } 42 + }
+60
crates/jacquard-api/lexicons/app_rocksky_dropbox_defs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.dropbox.defs", 4 + "defs": { 5 + "fileListView": { 6 + "type": "object", 7 + "properties": { 8 + "files": { 9 + "type": "array", 10 + "description": "A list of files in the Dropbox.", 11 + "items": { 12 + "type": "ref", 13 + "ref": "app.rocksky.dropbox.defs#fileView" 14 + } 15 + } 16 + } 17 + }, 18 + "fileView": { 19 + "type": "object", 20 + "properties": { 21 + "clientModified": { 22 + "type": "string", 23 + "description": "The last modified date and time of the file on the client.", 24 + "format": "datetime" 25 + }, 26 + "id": { 27 + "type": "string", 28 + "description": "The unique identifier of the file." 29 + }, 30 + "name": { 31 + "type": "string", 32 + "description": "The name of the file." 33 + }, 34 + "pathDisplay": { 35 + "type": "string", 36 + "description": "The display path of the file." 37 + }, 38 + "pathLower": { 39 + "type": "string", 40 + "description": "The lowercased path of the file." 41 + }, 42 + "serverModified": { 43 + "type": "string", 44 + "description": "The last modified date and time of the file on the server.", 45 + "format": "datetime" 46 + } 47 + } 48 + }, 49 + "temporaryLinkView": { 50 + "type": "object", 51 + "properties": { 52 + "link": { 53 + "type": "string", 54 + "description": "The temporary link to access the file.", 55 + "format": "uri" 56 + } 57 + } 58 + } 59 + } 60 + }
+25
crates/jacquard-api/lexicons/app_rocksky_dropbox_downloadFile.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.dropbox.downloadFile", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Download a file from Dropbox by its unique identifier", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "fileId" 12 + ], 13 + "properties": { 14 + "fileId": { 15 + "type": "string", 16 + "description": "The unique identifier of the file to download" 17 + } 18 + } 19 + }, 20 + "output": { 21 + "encoding": "application/octet-stream" 22 + } 23 + } 24 + } 25 + }
+26
crates/jacquard-api/lexicons/app_rocksky_dropbox_getFiles.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.dropbox.getFiles", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Retrieve a list of files from Dropbox", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "at": { 12 + "type": "string", 13 + "description": "Path to the Dropbox folder or root directory" 14 + } 15 + } 16 + }, 17 + "output": { 18 + "encoding": "application/json", 19 + "schema": { 20 + "type": "ref", 21 + "ref": "app.rocksky.dropbox.defs#fileListView" 22 + } 23 + } 24 + } 25 + } 26 + }
+29
crates/jacquard-api/lexicons/app_rocksky_dropbox_getMetadata.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.dropbox.getMetadata", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Retrieve metadata of a file or folder in Dropbox", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "path" 12 + ], 13 + "properties": { 14 + "path": { 15 + "type": "string", 16 + "description": "Path to the file or folder in Dropbox" 17 + } 18 + } 19 + }, 20 + "output": { 21 + "encoding": "application/json", 22 + "schema": { 23 + "type": "ref", 24 + "ref": "app.rocksky.dropbox.defs#fileView" 25 + } 26 + } 27 + } 28 + } 29 + }
+29
crates/jacquard-api/lexicons/app_rocksky_dropbox_getTemporaryLink.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.dropbox.getTemporaryLink", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Retrieve a temporary link to access a file in Dropbox", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "path" 12 + ], 13 + "properties": { 14 + "path": { 15 + "type": "string", 16 + "description": "Path to the file in Dropbox" 17 + } 18 + } 19 + }, 20 + "output": { 21 + "encoding": "application/json", 22 + "schema": { 23 + "type": "ref", 24 + "ref": "app.rocksky.dropbox.defs#temporaryLinkView" 25 + } 26 + } 27 + } 28 + } 29 + }
+105
crates/jacquard-api/lexicons/app_rocksky_feed_defs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.feed.defs", 4 + "defs": { 5 + "nowPlayingView": { 6 + "type": "object", 7 + "properties": { 8 + "album": { 9 + "type": "string" 10 + }, 11 + "albumArt": { 12 + "type": "string", 13 + "format": "uri" 14 + }, 15 + "albumArtist": { 16 + "type": "string" 17 + }, 18 + "albumUri": { 19 + "type": "string", 20 + "format": "at-uri" 21 + }, 22 + "artist": { 23 + "type": "string" 24 + }, 25 + "artistUri": { 26 + "type": "string", 27 + "format": "at-uri" 28 + }, 29 + "avatar": { 30 + "type": "string", 31 + "format": "uri" 32 + }, 33 + "createdAt": { 34 + "type": "string" 35 + }, 36 + "did": { 37 + "type": "string", 38 + "format": "at-identifier" 39 + }, 40 + "handle": { 41 + "type": "string" 42 + }, 43 + "id": { 44 + "type": "string" 45 + }, 46 + "title": { 47 + "type": "string" 48 + }, 49 + "trackId": { 50 + "type": "string" 51 + }, 52 + "trackUri": { 53 + "type": "string", 54 + "format": "at-uri" 55 + }, 56 + "uri": { 57 + "type": "string", 58 + "format": "at-uri" 59 + } 60 + } 61 + }, 62 + "nowPlayingsView": { 63 + "type": "object", 64 + "properties": { 65 + "nowPlayings": { 66 + "type": "array", 67 + "items": { 68 + "type": "ref", 69 + "ref": "app.rocksky.feed.defs#nowPlayingView" 70 + } 71 + } 72 + } 73 + }, 74 + "searchResultsView": { 75 + "type": "object", 76 + "properties": { 77 + "estimatedTotalHits": { 78 + "type": "integer" 79 + }, 80 + "hits": { 81 + "type": "array", 82 + "items": { 83 + "type": "union", 84 + "refs": [ 85 + "app.rocksky.song.defs#songViewBasic", 86 + "app.rocksky.album.defs#albumViewBasic", 87 + "app.rocksky.artist.defs#artistViewBasic", 88 + "app.rocksky.playlist.defs#playlistViewBasic", 89 + "app.rocksky.actor.defs#profileViewBasic" 90 + ] 91 + } 92 + }, 93 + "limit": { 94 + "type": "integer" 95 + }, 96 + "offset": { 97 + "type": "integer" 98 + }, 99 + "processingTimeMs": { 100 + "type": "integer" 101 + } 102 + } 103 + } 104 + } 105 + }
+27
crates/jacquard-api/lexicons/app_rocksky_feed_getNowPlayings.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.feed.getNowPlayings", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get all currently playing tracks by users", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "size": { 12 + "type": "integer", 13 + "description": "The maximum number of now playing tracks to return.", 14 + "minimum": 1 15 + } 16 + } 17 + }, 18 + "output": { 19 + "encoding": "application/json", 20 + "schema": { 21 + "type": "ref", 22 + "ref": "app.rocksky.feed.defs#nowPlayingsView" 23 + } 24 + } 25 + } 26 + } 27 + }
+29
crates/jacquard-api/lexicons/app_rocksky_feed_search.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.feed.search", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Search for content in the feed", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "query" 12 + ], 13 + "properties": { 14 + "query": { 15 + "type": "string", 16 + "description": "The search query string" 17 + } 18 + } 19 + }, 20 + "output": { 21 + "encoding": "application/json", 22 + "schema": { 23 + "type": "ref", 24 + "ref": "app.rocksky.feed.defs#searchResultsView" 25 + } 26 + } 27 + } 28 + } 29 + }
+27
crates/jacquard-api/lexicons/app_rocksky_googledrive_defs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.googledrive.defs", 4 + "defs": { 5 + "fileListView": { 6 + "type": "object", 7 + "properties": { 8 + "files": { 9 + "type": "array", 10 + "items": { 11 + "type": "ref", 12 + "ref": "app.rocksky.googledrive.defs#fileView" 13 + } 14 + } 15 + } 16 + }, 17 + "fileView": { 18 + "type": "object", 19 + "properties": { 20 + "id": { 21 + "type": "string", 22 + "description": "The unique identifier of the file." 23 + } 24 + } 25 + } 26 + } 27 + }
+25
crates/jacquard-api/lexicons/app_rocksky_googledrive_downloadFile.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.googledrive.downloadFile", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Download a file from Google Drive by its unique identifier", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "fileId" 12 + ], 13 + "properties": { 14 + "fileId": { 15 + "type": "string", 16 + "description": "The unique identifier of the file to download" 17 + } 18 + } 19 + }, 20 + "output": { 21 + "encoding": "application/octet-stream" 22 + } 23 + } 24 + } 25 + }
+29
crates/jacquard-api/lexicons/app_rocksky_googledrive_getFile.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.googledrive.getFile", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get a file from Google Drive by its unique identifier", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "fileId" 12 + ], 13 + "properties": { 14 + "fileId": { 15 + "type": "string", 16 + "description": "The unique identifier of the file to retrieve" 17 + } 18 + } 19 + }, 20 + "output": { 21 + "encoding": "application/json", 22 + "schema": { 23 + "type": "ref", 24 + "ref": "app.rocksky.googledrive.defs#fileView" 25 + } 26 + } 27 + } 28 + } 29 + }
+26
crates/jacquard-api/lexicons/app_rocksky_googledrive_getFiles.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.googledrive.getFiles", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get a list of files from Google Drive", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "at": { 12 + "type": "string", 13 + "description": "Path to the Google Drive folder or root directory" 14 + } 15 + } 16 + }, 17 + "output": { 18 + "encoding": "application/json", 19 + "schema": { 20 + "type": "ref", 21 + "ref": "app.rocksky.googledrive.defs#fileListView" 22 + } 23 + } 24 + } 25 + } 26 + }
+29
crates/jacquard-api/lexicons/app_rocksky_like.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.like", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "A declaration of a like.", 8 + "key": "tid", 9 + "record": { 10 + "type": "object", 11 + "required": [ 12 + "createdAt", 13 + "subject" 14 + ], 15 + "properties": { 16 + "createdAt": { 17 + "type": "string", 18 + "description": "The date when the like was created.", 19 + "format": "datetime" 20 + }, 21 + "subject": { 22 + "type": "ref", 23 + "ref": "com.atproto.repo.strongRef" 24 + } 25 + } 26 + } 27 + } 28 + } 29 + }
+30
crates/jacquard-api/lexicons/app_rocksky_like_dislikeShout.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.like.dislikeShout", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Dislike a shout", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "properties": { 13 + "uri": { 14 + "type": "string", 15 + "description": "The unique identifier of the shout to dislike", 16 + "format": "at-uri" 17 + } 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "ref", 25 + "ref": "app.rocksky.shout.defs#shoutView" 26 + } 27 + } 28 + } 29 + } 30 + }
+30
crates/jacquard-api/lexicons/app_rocksky_like_dislikeSong.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.like.dislikeSong", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Dislike a song", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "properties": { 13 + "uri": { 14 + "type": "string", 15 + "description": "The unique identifier of the song to dislike", 16 + "format": "at-uri" 17 + } 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "ref", 25 + "ref": "app.rocksky.song.defs#songViewDetailed" 26 + } 27 + } 28 + } 29 + } 30 + }
+30
crates/jacquard-api/lexicons/app_rocksky_like_likeShout.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.like.likeShout", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Like a shout", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "properties": { 13 + "uri": { 14 + "type": "string", 15 + "description": "The unique identifier of the shout to like", 16 + "format": "at-uri" 17 + } 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "ref", 25 + "ref": "app.rocksky.shout.defs#shoutView" 26 + } 27 + } 28 + } 29 + } 30 + }
+30
crates/jacquard-api/lexicons/app_rocksky_like_likeSong.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.like.likeSong", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Like a song", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "properties": { 13 + "uri": { 14 + "type": "string", 15 + "description": "The unique identifier of the song to like", 16 + "format": "at-uri" 17 + } 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "ref", 25 + "ref": "app.rocksky.song.defs#songViewDetailed" 26 + } 27 + } 28 + } 29 + } 30 + }
+15
crates/jacquard-api/lexicons/app_rocksky_player_defs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.player.defs", 4 + "defs": { 5 + "currentlyPlayingViewDetailed": { 6 + "type": "object", 7 + "properties": { 8 + "title": { 9 + "type": "string", 10 + "description": "The title of the currently playing track" 11 + } 12 + } 13 + } 14 + } 15 + }
+27
crates/jacquard-api/lexicons/app_rocksky_player_getCurrentlyPlaying.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.player.getCurrentlyPlaying", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get the currently playing track", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "actor": { 12 + "type": "string", 13 + "description": "Handle or DID of the actor to retrieve the currently playing track for. If not provided, defaults to the current user.", 14 + "format": "at-identifier" 15 + } 16 + } 17 + }, 18 + "output": { 19 + "encoding": "application/json", 20 + "schema": { 21 + "type": "ref", 22 + "ref": "app.rocksky.player.defs#currentlyPlayingViewDetailed" 23 + } 24 + } 25 + } 26 + } 27 + }
+10
crates/jacquard-api/lexicons/app_rocksky_player_next.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.player.next", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Play the next track in the queue" 8 + } 9 + } 10 + }
+10
crates/jacquard-api/lexicons/app_rocksky_player_pause.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.player.pause", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Pause the currently playing track" 8 + } 9 + } 10 + }
+10
crates/jacquard-api/lexicons/app_rocksky_player_play.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.player.play", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Resume playback of the currently paused track" 8 + } 9 + } 10 + }
+10
crates/jacquard-api/lexicons/app_rocksky_player_previous.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.player.previous", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Play the previous track in the queue" 8 + } 9 + } 10 + }
+22
crates/jacquard-api/lexicons/app_rocksky_player_seek.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.player.seek", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Seek to a specific position in the currently playing track", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "position" 12 + ], 13 + "properties": { 14 + "position": { 15 + "type": "integer", 16 + "description": "The position in seconds to seek to" 17 + } 18 + } 19 + } 20 + } 21 + } 22 + }
+70
crates/jacquard-api/lexicons/app_rocksky_playlist.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.playlist", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "A declaration of a playlist.", 8 + "key": "tid", 9 + "record": { 10 + "type": "object", 11 + "required": [ 12 + "name", 13 + "createdAt" 14 + ], 15 + "properties": { 16 + "appleMusicLink": { 17 + "type": "string", 18 + "description": "The Apple Music link of the playlist." 19 + }, 20 + "createdAt": { 21 + "type": "string", 22 + "description": "The date the playlist was created.", 23 + "format": "datetime" 24 + }, 25 + "description": { 26 + "type": "string", 27 + "description": "The playlist description.", 28 + "minLength": 1, 29 + "maxLength": 256 30 + }, 31 + "name": { 32 + "type": "string", 33 + "description": "The name of the playlist.", 34 + "minLength": 1, 35 + "maxLength": 512 36 + }, 37 + "picture": { 38 + "type": "blob", 39 + "description": "The picture of the playlist.", 40 + "accept": [ 41 + "image/png", 42 + "image/jpeg" 43 + ], 44 + "maxSize": 2000000 45 + }, 46 + "spotifyLink": { 47 + "type": "string", 48 + "description": "The Spotify link of the playlist." 49 + }, 50 + "tidalLink": { 51 + "type": "string", 52 + "description": "The Tidal link of the playlist." 53 + }, 54 + "tracks": { 55 + "type": "array", 56 + "description": "The tracks in the playlist.", 57 + "items": { 58 + "type": "ref", 59 + "ref": "app.rocksky.song#record" 60 + } 61 + }, 62 + "youtubeLink": { 63 + "type": "string", 64 + "description": "The YouTube link of the playlist." 65 + } 66 + } 67 + } 68 + } 69 + } 70 + }
+123
crates/jacquard-api/lexicons/app_rocksky_playlist_defs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.playlist.defs", 4 + "defs": { 5 + "playlistViewBasic": { 6 + "type": "object", 7 + "description": "Basic view of a playlist, including its metadata", 8 + "properties": { 9 + "coverImageUrl": { 10 + "type": "string", 11 + "description": "The URL of the cover image for the playlist.", 12 + "format": "uri" 13 + }, 14 + "createdAt": { 15 + "type": "string", 16 + "description": "The date and time when the playlist was created.", 17 + "format": "datetime" 18 + }, 19 + "curatorAvatarUrl": { 20 + "type": "string", 21 + "description": "The URL of the avatar image of the curator.", 22 + "format": "uri" 23 + }, 24 + "curatorDid": { 25 + "type": "string", 26 + "description": "The DID of the curator of the playlist.", 27 + "format": "at-identifier" 28 + }, 29 + "curatorHandle": { 30 + "type": "string", 31 + "description": "The handle of the curator of the playlist.", 32 + "format": "at-identifier" 33 + }, 34 + "curatorName": { 35 + "type": "string", 36 + "description": "The name of the curator of the playlist." 37 + }, 38 + "description": { 39 + "type": "string", 40 + "description": "A description of the playlist." 41 + }, 42 + "id": { 43 + "type": "string", 44 + "description": "The unique identifier of the playlist." 45 + }, 46 + "title": { 47 + "type": "string", 48 + "description": "The title of the playlist." 49 + }, 50 + "trackCount": { 51 + "type": "integer", 52 + "description": "The number of tracks in the playlist.", 53 + "minimum": 0 54 + }, 55 + "uri": { 56 + "type": "string", 57 + "description": "The URI of the playlist.", 58 + "format": "at-uri" 59 + } 60 + } 61 + }, 62 + "playlistViewDetailed": { 63 + "type": "object", 64 + "description": "Detailed view of a playlist, including its tracks and metadata", 65 + "properties": { 66 + "coverImageUrl": { 67 + "type": "string", 68 + "description": "The URL of the cover image for the playlist.", 69 + "format": "uri" 70 + }, 71 + "createdAt": { 72 + "type": "string", 73 + "description": "The date and time when the playlist was created.", 74 + "format": "datetime" 75 + }, 76 + "curatorAvatarUrl": { 77 + "type": "string", 78 + "description": "The URL of the avatar image of the curator.", 79 + "format": "uri" 80 + }, 81 + "curatorDid": { 82 + "type": "string", 83 + "description": "The DID of the curator of the playlist.", 84 + "format": "at-identifier" 85 + }, 86 + "curatorHandle": { 87 + "type": "string", 88 + "description": "The handle of the curator of the playlist.", 89 + "format": "at-identifier" 90 + }, 91 + "curatorName": { 92 + "type": "string", 93 + "description": "The name of the curator of the playlist." 94 + }, 95 + "description": { 96 + "type": "string", 97 + "description": "A description of the playlist." 98 + }, 99 + "id": { 100 + "type": "string", 101 + "description": "The unique identifier of the playlist." 102 + }, 103 + "title": { 104 + "type": "string", 105 + "description": "The title of the playlist." 106 + }, 107 + "tracks": { 108 + "type": "array", 109 + "description": "A list of tracks in the playlist.", 110 + "items": { 111 + "type": "ref", 112 + "ref": "app.rocksky.song.defs#songViewBasic" 113 + } 114 + }, 115 + "uri": { 116 + "type": "string", 117 + "description": "The URI of the playlist.", 118 + "format": "at-uri" 119 + } 120 + } 121 + } 122 + } 123 + }
+30
crates/jacquard-api/lexicons/app_rocksky_playlist_getPlaylist.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.playlist.getPlaylist", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Retrieve a playlist by its ID", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "uri": { 15 + "type": "string", 16 + "description": "The URI of the playlist to retrieve.", 17 + "format": "at-uri" 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "ref", 25 + "ref": "app.rocksky.playlist.defs#playlistViewDetailed" 26 + } 27 + } 28 + } 29 + } 30 + }
+38
crates/jacquard-api/lexicons/app_rocksky_playlist_getPlaylists.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.playlist.getPlaylists", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Retrieve a list of playlists", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "limit": { 12 + "type": "integer", 13 + "description": "The maximum number of playlists to return." 14 + }, 15 + "offset": { 16 + "type": "integer", 17 + "description": "The offset for pagination, used to skip a number of playlists." 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "object", 25 + "properties": { 26 + "playlists": { 27 + "type": "array", 28 + "items": { 29 + "type": "ref", 30 + "ref": "app.rocksky.playlist.defs#playlistViewBasic" 31 + } 32 + } 33 + } 34 + } 35 + } 36 + } 37 + } 38 + }
+63
crates/jacquard-api/lexicons/app_rocksky_radio.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.radio", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "A declaration of a radio station.", 8 + "key": "tid", 9 + "record": { 10 + "type": "object", 11 + "required": [ 12 + "name", 13 + "url", 14 + "createdAt" 15 + ], 16 + "properties": { 17 + "createdAt": { 18 + "type": "string", 19 + "description": "The date when the radio station was created.", 20 + "format": "datetime" 21 + }, 22 + "description": { 23 + "type": "string", 24 + "description": "A description of the radio station.", 25 + "minLength": 1, 26 + "maxLength": 1000 27 + }, 28 + "genre": { 29 + "type": "string", 30 + "description": "The genre of the radio station.", 31 + "minLength": 1, 32 + "maxLength": 256 33 + }, 34 + "logo": { 35 + "type": "blob", 36 + "description": "The logo of the radio station.", 37 + "accept": [ 38 + "image/png", 39 + "image/jpeg" 40 + ], 41 + "maxSize": 2000000 42 + }, 43 + "name": { 44 + "type": "string", 45 + "description": "The name of the radio station.", 46 + "minLength": 1, 47 + "maxLength": 512 48 + }, 49 + "url": { 50 + "type": "string", 51 + "description": "The URL of the radio station.", 52 + "format": "uri" 53 + }, 54 + "website": { 55 + "type": "string", 56 + "description": "The website of the radio station.", 57 + "format": "uri" 58 + } 59 + } 60 + } 61 + } 62 + } 63 + }
+68
crates/jacquard-api/lexicons/app_rocksky_radio_defs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.radio.defs", 4 + "defs": { 5 + "radioViewBasic": { 6 + "type": "object", 7 + "properties": { 8 + "createdAt": { 9 + "type": "string", 10 + "description": "The date and time when the radio was created.", 11 + "format": "datetime" 12 + }, 13 + "description": { 14 + "type": "string", 15 + "description": "A brief description of the radio." 16 + }, 17 + "id": { 18 + "type": "string", 19 + "description": "The unique identifier of the radio." 20 + }, 21 + "name": { 22 + "type": "string", 23 + "description": "The name of the radio." 24 + } 25 + } 26 + }, 27 + "radioViewDetailed": { 28 + "type": "object", 29 + "properties": { 30 + "createdAt": { 31 + "type": "string", 32 + "description": "The date and time when the radio was created.", 33 + "format": "datetime" 34 + }, 35 + "description": { 36 + "type": "string", 37 + "description": "A brief description of the radio." 38 + }, 39 + "genre": { 40 + "type": "string", 41 + "description": "The genre of the radio." 42 + }, 43 + "id": { 44 + "type": "string", 45 + "description": "The unique identifier of the radio." 46 + }, 47 + "logo": { 48 + "type": "string", 49 + "description": "The logo of the radio station." 50 + }, 51 + "name": { 52 + "type": "string", 53 + "description": "The name of the radio." 54 + }, 55 + "url": { 56 + "type": "string", 57 + "description": "The streaming URL of the radio.", 58 + "format": "uri" 59 + }, 60 + "website": { 61 + "type": "string", 62 + "description": "The website of the radio.", 63 + "format": "uri" 64 + } 65 + } 66 + } 67 + } 68 + }
+149
crates/jacquard-api/lexicons/app_rocksky_scrobble.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.scrobble", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "A declaration of a scrobble.", 8 + "key": "tid", 9 + "record": { 10 + "type": "object", 11 + "required": [ 12 + "title", 13 + "artist", 14 + "album", 15 + "albumArtist", 16 + "duration", 17 + "createdAt" 18 + ], 19 + "properties": { 20 + "album": { 21 + "type": "string", 22 + "description": "The album of the song.", 23 + "minLength": 1, 24 + "maxLength": 256 25 + }, 26 + "albumArt": { 27 + "type": "blob", 28 + "description": "The album art of the song.", 29 + "accept": [ 30 + "image/png", 31 + "image/jpeg" 32 + ], 33 + "maxSize": 2000000 34 + }, 35 + "albumArtist": { 36 + "type": "string", 37 + "description": "The album artist of the song.", 38 + "minLength": 1, 39 + "maxLength": 256 40 + }, 41 + "appleMusicLink": { 42 + "type": "string", 43 + "description": "The Apple Music link of the song.", 44 + "format": "uri" 45 + }, 46 + "artist": { 47 + "type": "string", 48 + "description": "The artist of the song.", 49 + "minLength": 1, 50 + "maxLength": 256 51 + }, 52 + "composer": { 53 + "type": "string", 54 + "description": "The composer of the song.", 55 + "maxLength": 256 56 + }, 57 + "copyrightMessage": { 58 + "type": "string", 59 + "description": "The copyright message of the song.", 60 + "maxLength": 256 61 + }, 62 + "createdAt": { 63 + "type": "string", 64 + "description": "The date when the song was created.", 65 + "format": "datetime" 66 + }, 67 + "discNumber": { 68 + "type": "integer", 69 + "description": "The disc number of the song in the album.", 70 + "minimum": 1 71 + }, 72 + "duration": { 73 + "type": "integer", 74 + "description": "The duration of the song in seconds.", 75 + "minimum": 1 76 + }, 77 + "genre": { 78 + "type": "string", 79 + "description": "The genre of the song.", 80 + "maxLength": 256 81 + }, 82 + "label": { 83 + "type": "string", 84 + "description": "The label of the song.", 85 + "maxLength": 256 86 + }, 87 + "lyrics": { 88 + "type": "string", 89 + "description": "The lyrics of the song.", 90 + "maxLength": 10000 91 + }, 92 + "mbid": { 93 + "type": "string", 94 + "description": "The MusicBrainz ID of the song." 95 + }, 96 + "releaseDate": { 97 + "type": "string", 98 + "description": "The release date of the song.", 99 + "format": "datetime" 100 + }, 101 + "spotifyLink": { 102 + "type": "string", 103 + "description": "The Spotify link of the song.", 104 + "format": "uri" 105 + }, 106 + "tags": { 107 + "type": "array", 108 + "description": "The tags of the song.", 109 + "items": { 110 + "type": "string", 111 + "minLength": 1, 112 + "maxLength": 256 113 + } 114 + }, 115 + "tidalLink": { 116 + "type": "string", 117 + "description": "The Tidal link of the song.", 118 + "format": "uri" 119 + }, 120 + "title": { 121 + "type": "string", 122 + "description": "The title of the song.", 123 + "minLength": 1, 124 + "maxLength": 512 125 + }, 126 + "trackNumber": { 127 + "type": "integer", 128 + "description": "The track number of the song in the album.", 129 + "minimum": 1 130 + }, 131 + "wiki": { 132 + "type": "string", 133 + "description": "Informations about the song", 134 + "maxLength": 10000 135 + }, 136 + "year": { 137 + "type": "integer", 138 + "description": "The year the song was released." 139 + }, 140 + "youtubeLink": { 141 + "type": "string", 142 + "description": "The YouTube link of the song.", 143 + "format": "uri" 144 + } 145 + } 146 + } 147 + } 148 + } 149 + }
+125
crates/jacquard-api/lexicons/app_rocksky_scrobble_createScrobble.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.scrobble.createScrobble", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Create a new scrobble", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": [ 13 + "title", 14 + "artist" 15 + ], 16 + "properties": { 17 + "album": { 18 + "type": "string", 19 + "description": "The album of the track being scrobbled" 20 + }, 21 + "albumArt": { 22 + "type": "string", 23 + "description": "The URL of the album art for the track", 24 + "format": "uri" 25 + }, 26 + "appleMusicLink": { 27 + "type": "string", 28 + "description": "The Apple Music link for the track, if available", 29 + "format": "uri" 30 + }, 31 + "artist": { 32 + "type": "string", 33 + "description": "The artist of the track being scrobbled" 34 + }, 35 + "artistPicture": { 36 + "type": "string", 37 + "description": "The URL of the artist's picture, if available", 38 + "format": "uri" 39 + }, 40 + "composer": { 41 + "type": "string", 42 + "description": "The composer of the track, if available" 43 + }, 44 + "copyrightMessage": { 45 + "type": "string", 46 + "description": "The copyright message for the track, if available" 47 + }, 48 + "deezerLink": { 49 + "type": "string", 50 + "description": "The Deezer link for the track, if available", 51 + "format": "uri" 52 + }, 53 + "discNumber": { 54 + "type": "integer", 55 + "description": "The disc number of the track in the album, if applicable" 56 + }, 57 + "duration": { 58 + "type": "integer", 59 + "description": "The duration of the track in seconds" 60 + }, 61 + "label": { 62 + "type": "string", 63 + "description": "The record label of the track, if available" 64 + }, 65 + "lastfmLink": { 66 + "type": "string", 67 + "description": "The Last.fm link for the track, if available", 68 + "format": "uri" 69 + }, 70 + "lyrics": { 71 + "type": "string", 72 + "description": "The lyrics of the track, if available" 73 + }, 74 + "mbId": { 75 + "type": "string", 76 + "description": "The MusicBrainz ID of the track, if available" 77 + }, 78 + "releaseDate": { 79 + "type": "string", 80 + "description": "The release date of the track, formatted as YYYY-MM-DD" 81 + }, 82 + "spotifyLink": { 83 + "type": "string", 84 + "description": "The Spotify link for the track, if available", 85 + "format": "uri" 86 + }, 87 + "tidalLink": { 88 + "type": "string", 89 + "description": "The Tidal link for the track, if available", 90 + "format": "uri" 91 + }, 92 + "timestamp": { 93 + "type": "integer", 94 + "description": "The timestamp of the scrobble in milliseconds since epoch" 95 + }, 96 + "title": { 97 + "type": "string", 98 + "description": "The title of the track being scrobbled" 99 + }, 100 + "trackNumber": { 101 + "type": "integer", 102 + "description": "The track number of the track in the album" 103 + }, 104 + "year": { 105 + "type": "integer", 106 + "description": "The year the track was released" 107 + }, 108 + "youtubeLink": { 109 + "type": "string", 110 + "description": "The Youtube link for the track, if available", 111 + "format": "uri" 112 + } 113 + } 114 + } 115 + }, 116 + "output": { 117 + "encoding": "application/json", 118 + "schema": { 119 + "type": "ref", 120 + "ref": "app.rocksky.scrobble.defs#scrobbleViewBasic" 121 + } 122 + } 123 + } 124 + } 125 + }
+122
crates/jacquard-api/lexicons/app_rocksky_scrobble_defs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.scrobble.defs", 4 + "defs": { 5 + "scrobbleViewBasic": { 6 + "type": "object", 7 + "properties": { 8 + "album": { 9 + "type": "string", 10 + "description": "The album of the song." 11 + }, 12 + "albumUri": { 13 + "type": "string", 14 + "description": "The URI of the album.", 15 + "format": "at-uri" 16 + }, 17 + "artist": { 18 + "type": "string", 19 + "description": "The artist of the song." 20 + }, 21 + "artistUri": { 22 + "type": "string", 23 + "description": "The URI of the artist.", 24 + "format": "at-uri" 25 + }, 26 + "cover": { 27 + "type": "string", 28 + "description": "The album art URL of the song.", 29 + "format": "uri" 30 + }, 31 + "date": { 32 + "type": "string", 33 + "description": "The timestamp when the scrobble was created.", 34 + "format": "datetime" 35 + }, 36 + "id": { 37 + "type": "string", 38 + "description": "The unique identifier of the scrobble." 39 + }, 40 + "sha256": { 41 + "type": "string", 42 + "description": "The SHA256 hash of the scrobble data." 43 + }, 44 + "title": { 45 + "type": "string", 46 + "description": "The title of the scrobble." 47 + }, 48 + "uri": { 49 + "type": "string", 50 + "description": "The URI of the scrobble.", 51 + "format": "uri" 52 + }, 53 + "user": { 54 + "type": "string", 55 + "description": "The handle of the user who created the scrobble." 56 + } 57 + } 58 + }, 59 + "scrobbleViewDetailed": { 60 + "type": "object", 61 + "properties": { 62 + "album": { 63 + "type": "string", 64 + "description": "The album of the song." 65 + }, 66 + "albumUri": { 67 + "type": "string", 68 + "description": "The URI of the album.", 69 + "format": "at-uri" 70 + }, 71 + "artist": { 72 + "type": "string", 73 + "description": "The artist of the song." 74 + }, 75 + "artistUri": { 76 + "type": "string", 77 + "description": "The URI of the artist.", 78 + "format": "at-uri" 79 + }, 80 + "cover": { 81 + "type": "string", 82 + "description": "The album art URL of the song.", 83 + "format": "uri" 84 + }, 85 + "date": { 86 + "type": "string", 87 + "description": "The timestamp when the scrobble was created.", 88 + "format": "datetime" 89 + }, 90 + "id": { 91 + "type": "string", 92 + "description": "The unique identifier of the scrobble." 93 + }, 94 + "listeners": { 95 + "type": "integer", 96 + "description": "The number of listeners" 97 + }, 98 + "scrobbles": { 99 + "type": "integer", 100 + "description": "The number of scrobbles for this song" 101 + }, 102 + "sha256": { 103 + "type": "string", 104 + "description": "The SHA256 hash of the scrobble data." 105 + }, 106 + "title": { 107 + "type": "string", 108 + "description": "The title of the scrobble." 109 + }, 110 + "uri": { 111 + "type": "string", 112 + "description": "The URI of the scrobble.", 113 + "format": "uri" 114 + }, 115 + "user": { 116 + "type": "string", 117 + "description": "The handle of the user who created the scrobble." 118 + } 119 + } 120 + } 121 + } 122 + }
+30
crates/jacquard-api/lexicons/app_rocksky_scrobble_getScrobble.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.scrobble.getScrobble", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get a scrobble by its unique identifier", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "uri": { 15 + "type": "string", 16 + "description": "The unique identifier of the scrobble", 17 + "format": "at-uri" 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "ref", 25 + "ref": "app.rocksky.scrobble.defs#scrobbleViewDetailed" 26 + } 27 + } 28 + } 29 + } 30 + }
+45
crates/jacquard-api/lexicons/app_rocksky_scrobble_getScrobbles.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.scrobble.getScrobbles", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get scrobbles all scrobbles", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "did": { 12 + "type": "string", 13 + "description": "The DID or handle of the actor", 14 + "format": "at-identifier" 15 + }, 16 + "limit": { 17 + "type": "integer", 18 + "description": "The maximum number of scrobbles to return", 19 + "minimum": 1 20 + }, 21 + "offset": { 22 + "type": "integer", 23 + "description": "The offset for pagination", 24 + "minimum": 0 25 + } 26 + } 27 + }, 28 + "output": { 29 + "encoding": "application/json", 30 + "schema": { 31 + "type": "object", 32 + "properties": { 33 + "scrobbles": { 34 + "type": "array", 35 + "items": { 36 + "type": "ref", 37 + "ref": "app.rocksky.scrobble.defs#scrobbleViewBasic" 38 + } 39 + } 40 + } 41 + } 42 + } 43 + } 44 + } 45 + }
+40
crates/jacquard-api/lexicons/app_rocksky_shout.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.shout", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "A declaration of a shout.", 8 + "key": "tid", 9 + "record": { 10 + "type": "object", 11 + "required": [ 12 + "message", 13 + "createdAt", 14 + "subject" 15 + ], 16 + "properties": { 17 + "createdAt": { 18 + "type": "string", 19 + "description": "The date when the shout was created.", 20 + "format": "datetime" 21 + }, 22 + "message": { 23 + "type": "string", 24 + "description": "The message of the shout.", 25 + "minLength": 1, 26 + "maxLength": 1000 27 + }, 28 + "parent": { 29 + "type": "ref", 30 + "ref": "com.atproto.repo.strongRef" 31 + }, 32 + "subject": { 33 + "type": "ref", 34 + "ref": "com.atproto.repo.strongRef" 35 + } 36 + } 37 + } 38 + } 39 + } 40 + }
+30
crates/jacquard-api/lexicons/app_rocksky_shout_createShout.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.shout.createShout", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Create a new shout", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "properties": { 13 + "message": { 14 + "type": "string", 15 + "description": "The content of the shout", 16 + "minLength": 1 17 + } 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "ref", 25 + "ref": "app.rocksky.shout.defs#shoutView" 26 + } 27 + } 28 + } 29 + } 30 + }
+61
crates/jacquard-api/lexicons/app_rocksky_shout_defs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.shout.defs", 4 + "defs": { 5 + "author": { 6 + "type": "object", 7 + "properties": { 8 + "avatar": { 9 + "type": "string", 10 + "description": "The URL of the author's avatar image.", 11 + "format": "uri" 12 + }, 13 + "did": { 14 + "type": "string", 15 + "description": "The decentralized identifier (DID) of the author.", 16 + "format": "at-identifier" 17 + }, 18 + "displayName": { 19 + "type": "string", 20 + "description": "The display name of the author." 21 + }, 22 + "handle": { 23 + "type": "string", 24 + "description": "The handle of the author.", 25 + "format": "at-identifier" 26 + }, 27 + "id": { 28 + "type": "string", 29 + "description": "The unique identifier of the author." 30 + } 31 + } 32 + }, 33 + "shoutView": { 34 + "type": "object", 35 + "properties": { 36 + "author": { 37 + "type": "ref", 38 + "description": "The author of the shout.", 39 + "ref": "app.rocksky.shout.defs#author" 40 + }, 41 + "createdAt": { 42 + "type": "string", 43 + "description": "The date and time when the shout was created.", 44 + "format": "datetime" 45 + }, 46 + "id": { 47 + "type": "string", 48 + "description": "The unique identifier of the shout." 49 + }, 50 + "message": { 51 + "type": "string", 52 + "description": "The content of the shout." 53 + }, 54 + "parent": { 55 + "type": "string", 56 + "description": "The ID of the parent shout if this is a reply, otherwise null." 57 + } 58 + } 59 + } 60 + } 61 + }
+48
crates/jacquard-api/lexicons/app_rocksky_shout_getAlbumShouts.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.shout.getAlbumShouts", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get shouts for an album", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "limit": { 15 + "type": "integer", 16 + "description": "The maximum number of shouts to return", 17 + "minimum": 1 18 + }, 19 + "offset": { 20 + "type": "integer", 21 + "description": "The number of shouts to skip before starting to collect the result set", 22 + "minimum": 0 23 + }, 24 + "uri": { 25 + "type": "string", 26 + "description": "The unique identifier of the album to retrieve shouts for", 27 + "format": "at-uri" 28 + } 29 + } 30 + }, 31 + "output": { 32 + "encoding": "application/json", 33 + "schema": { 34 + "type": "object", 35 + "properties": { 36 + "shouts": { 37 + "type": "array", 38 + "items": { 39 + "type": "ref", 40 + "ref": "app.rocksky.shout.defs#shoutViewBasic" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + } 47 + } 48 + }
+48
crates/jacquard-api/lexicons/app_rocksky_shout_getArtistShouts.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.shout.getArtistShouts", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get shouts for an artist", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "limit": { 15 + "type": "integer", 16 + "description": "The maximum number of shouts to return", 17 + "minimum": 1 18 + }, 19 + "offset": { 20 + "type": "integer", 21 + "description": "The number of shouts to skip before starting to collect the result set", 22 + "minimum": 0 23 + }, 24 + "uri": { 25 + "type": "string", 26 + "description": "The URI of the artist to retrieve shouts for", 27 + "format": "at-uri" 28 + } 29 + } 30 + }, 31 + "output": { 32 + "encoding": "application/json", 33 + "schema": { 34 + "type": "object", 35 + "properties": { 36 + "shouts": { 37 + "type": "array", 38 + "items": { 39 + "type": "ref", 40 + "ref": "app.rocksky.shout.defs#shoutViewBasic" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + } 47 + } 48 + }
+48
crates/jacquard-api/lexicons/app_rocksky_shout_getProfileShouts.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.shout.getProfileShouts", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get the shouts of an actor's profile", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "did" 12 + ], 13 + "properties": { 14 + "did": { 15 + "type": "string", 16 + "description": "The DID or handle of the actor", 17 + "format": "at-identifier" 18 + }, 19 + "limit": { 20 + "type": "integer", 21 + "description": "The maximum number of shouts to return", 22 + "minimum": 1 23 + }, 24 + "offset": { 25 + "type": "integer", 26 + "description": "The offset for pagination", 27 + "minimum": 0 28 + } 29 + } 30 + }, 31 + "output": { 32 + "encoding": "application/json", 33 + "schema": { 34 + "type": "object", 35 + "properties": { 36 + "shouts": { 37 + "type": "array", 38 + "items": { 39 + "type": "ref", 40 + "ref": "app.rocksky.shout.defs#shoutViewBasic" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + } 47 + } 48 + }
+48
crates/jacquard-api/lexicons/app_rocksky_shout_getShoutReplies.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.shout.getShoutReplies", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get replies to a shout", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "limit": { 15 + "type": "integer", 16 + "description": "The maximum number of shouts to return", 17 + "minimum": 1 18 + }, 19 + "offset": { 20 + "type": "integer", 21 + "description": "The number of shouts to skip before starting to collect the result set", 22 + "minimum": 0 23 + }, 24 + "uri": { 25 + "type": "string", 26 + "description": "The URI of the shout to retrieve replies for", 27 + "format": "at-uri" 28 + } 29 + } 30 + }, 31 + "output": { 32 + "encoding": "application/json", 33 + "schema": { 34 + "type": "object", 35 + "properties": { 36 + "shouts": { 37 + "type": "array", 38 + "items": { 39 + "type": "ref", 40 + "ref": "app.rocksky.shout.defs#shoutViewBasic" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + } 47 + } 48 + }
+38
crates/jacquard-api/lexicons/app_rocksky_shout_getTrackShouts.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.shout.getTrackShouts", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get all shouts for a specific track", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "uri": { 15 + "type": "string", 16 + "description": "The URI of the track to retrieve shouts for", 17 + "format": "at-uri" 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "object", 25 + "properties": { 26 + "shouts": { 27 + "type": "array", 28 + "items": { 29 + "type": "ref", 30 + "ref": "app.rocksky.shout.defs#shoutViewBasic" 31 + } 32 + } 33 + } 34 + } 35 + } 36 + } 37 + } 38 + }
+29
crates/jacquard-api/lexicons/app_rocksky_shout_removeShout.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.shout.removeShout", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Remove a shout by its ID", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "id" 12 + ], 13 + "properties": { 14 + "id": { 15 + "type": "string", 16 + "description": "The ID of the shout to be removed" 17 + } 18 + } 19 + }, 20 + "output": { 21 + "encoding": "application/json", 22 + "schema": { 23 + "type": "ref", 24 + "ref": "app.rocksky.shout.defs#shoutView" 25 + } 26 + } 27 + } 28 + } 29 + }
+38
crates/jacquard-api/lexicons/app_rocksky_shout_replyShout.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.shout.replyShout", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Reply to a shout", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": [ 13 + "shoutId", 14 + "message" 15 + ], 16 + "properties": { 17 + "message": { 18 + "type": "string", 19 + "description": "The content of the reply", 20 + "minLength": 1 21 + }, 22 + "shoutId": { 23 + "type": "string", 24 + "description": "The unique identifier of the shout to reply to" 25 + } 26 + } 27 + } 28 + }, 29 + "output": { 30 + "encoding": "application/json", 31 + "schema": { 32 + "type": "ref", 33 + "ref": "app.rocksky.shout.defs#shoutView" 34 + } 35 + } 36 + } 37 + } 38 + }
+37
crates/jacquard-api/lexicons/app_rocksky_shout_reportShout.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.shout.reportShout", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Report a shout for moderation", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": [ 13 + "shoutId" 14 + ], 15 + "properties": { 16 + "reason": { 17 + "type": "string", 18 + "description": "The reason for reporting the shout", 19 + "minLength": 1 20 + }, 21 + "shoutId": { 22 + "type": "string", 23 + "description": "The unique identifier of the shout to report" 24 + } 25 + } 26 + } 27 + }, 28 + "output": { 29 + "encoding": "application/json", 30 + "schema": { 31 + "type": "ref", 32 + "ref": "app.rocksky.shout.defs#shoutView" 33 + } 34 + } 35 + } 36 + } 37 + }
+150
crates/jacquard-api/lexicons/app_rocksky_song.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.song", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "A declaration of a song.", 8 + "key": "tid", 9 + "record": { 10 + "type": "object", 11 + "required": [ 12 + "title", 13 + "artist", 14 + "album", 15 + "albumArtist", 16 + "duration", 17 + "createdAt" 18 + ], 19 + "properties": { 20 + "album": { 21 + "type": "string", 22 + "description": "The album of the song.", 23 + "minLength": 1, 24 + "maxLength": 256 25 + }, 26 + "albumArt": { 27 + "type": "blob", 28 + "description": "The album art of the song.", 29 + "accept": [ 30 + "image/png", 31 + "image/jpeg" 32 + ], 33 + "maxSize": 2000000 34 + }, 35 + "albumArtist": { 36 + "type": "string", 37 + "description": "The album artist of the song.", 38 + "minLength": 1, 39 + "maxLength": 256 40 + }, 41 + "appleMusicLink": { 42 + "type": "string", 43 + "description": "The Apple Music link of the song.", 44 + "format": "uri" 45 + }, 46 + "artist": { 47 + "type": "string", 48 + "description": "The artist of the song.", 49 + "minLength": 1, 50 + "maxLength": 256 51 + }, 52 + "composer": { 53 + "type": "string", 54 + "description": "The composer of the song.", 55 + "maxLength": 256 56 + }, 57 + "copyrightMessage": { 58 + "type": "string", 59 + "description": "The copyright message of the song.", 60 + "maxLength": 256 61 + }, 62 + "createdAt": { 63 + "type": "string", 64 + "description": "The date when the song was created.", 65 + "format": "datetime" 66 + }, 67 + "discNumber": { 68 + "type": "integer", 69 + "description": "The disc number of the song in the album.", 70 + "minimum": 1 71 + }, 72 + "duration": { 73 + "type": "integer", 74 + "description": "The duration of the song in seconds.", 75 + "minimum": 1 76 + }, 77 + "genre": { 78 + "type": "string", 79 + "description": "The genre of the song.", 80 + "minLength": 1, 81 + "maxLength": 256 82 + }, 83 + "label": { 84 + "type": "string", 85 + "description": "The label of the song.", 86 + "maxLength": 256 87 + }, 88 + "lyrics": { 89 + "type": "string", 90 + "description": "The lyrics of the song.", 91 + "maxLength": 10000 92 + }, 93 + "mbid": { 94 + "type": "string", 95 + "description": "The MusicBrainz ID of the song." 96 + }, 97 + "releaseDate": { 98 + "type": "string", 99 + "description": "The release date of the song.", 100 + "format": "datetime" 101 + }, 102 + "spotifyLink": { 103 + "type": "string", 104 + "description": "The Spotify link of the song.", 105 + "format": "uri" 106 + }, 107 + "tags": { 108 + "type": "array", 109 + "description": "The tags of the song.", 110 + "items": { 111 + "type": "string", 112 + "minLength": 1, 113 + "maxLength": 256 114 + } 115 + }, 116 + "tidalLink": { 117 + "type": "string", 118 + "description": "The Tidal link of the song.", 119 + "format": "uri" 120 + }, 121 + "title": { 122 + "type": "string", 123 + "description": "The title of the song.", 124 + "minLength": 1, 125 + "maxLength": 512 126 + }, 127 + "trackNumber": { 128 + "type": "integer", 129 + "description": "The track number of the song in the album.", 130 + "minimum": 1 131 + }, 132 + "wiki": { 133 + "type": "string", 134 + "description": "Informations about the song", 135 + "maxLength": 10000 136 + }, 137 + "year": { 138 + "type": "integer", 139 + "description": "The year the song was released." 140 + }, 141 + "youtubeLink": { 142 + "type": "string", 143 + "description": "The YouTube link of the song.", 144 + "format": "uri" 145 + } 146 + } 147 + } 148 + } 149 + } 150 + }
+80
crates/jacquard-api/lexicons/app_rocksky_song_createSong.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.song.createSong", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Create a new song", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": [ 13 + "title", 14 + "artist", 15 + "album", 16 + "albumArtist" 17 + ], 18 + "properties": { 19 + "album": { 20 + "type": "string", 21 + "description": "The album of the song, if applicable" 22 + }, 23 + "albumArt": { 24 + "type": "string", 25 + "description": "The URL of the album art for the song", 26 + "format": "uri" 27 + }, 28 + "albumArtist": { 29 + "type": "string", 30 + "description": "The album artist of the song, if different from the main artist" 31 + }, 32 + "artist": { 33 + "type": "string", 34 + "description": "The artist of the song" 35 + }, 36 + "discNumber": { 37 + "type": "integer", 38 + "description": "The disc number of the song in the album, if applicable" 39 + }, 40 + "duration": { 41 + "type": "integer", 42 + "description": "The duration of the song in seconds" 43 + }, 44 + "lyrics": { 45 + "type": "string", 46 + "description": "The lyrics of the song, if available" 47 + }, 48 + "mbId": { 49 + "type": "string", 50 + "description": "The MusicBrainz ID of the song, if available" 51 + }, 52 + "releaseDate": { 53 + "type": "string", 54 + "description": "The release date of the song, formatted as YYYY-MM-DD" 55 + }, 56 + "title": { 57 + "type": "string", 58 + "description": "The title of the song" 59 + }, 60 + "trackNumber": { 61 + "type": "integer", 62 + "description": "The track number of the song in the album, if applicable" 63 + }, 64 + "year": { 65 + "type": "integer", 66 + "description": "The year the song was released" 67 + } 68 + } 69 + } 70 + }, 71 + "output": { 72 + "encoding": "application/json", 73 + "schema": { 74 + "type": "ref", 75 + "ref": "app.rocksky.song.defs#songViewDetailed" 76 + } 77 + } 78 + } 79 + } 80 + }
+158
crates/jacquard-api/lexicons/app_rocksky_song_defs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.song.defs", 4 + "defs": { 5 + "songViewBasic": { 6 + "type": "object", 7 + "properties": { 8 + "album": { 9 + "type": "string", 10 + "description": "The album of the song." 11 + }, 12 + "albumArt": { 13 + "type": "string", 14 + "description": "The URL of the album art image.", 15 + "format": "uri" 16 + }, 17 + "albumArtist": { 18 + "type": "string", 19 + "description": "The artist of the album the song belongs to." 20 + }, 21 + "albumUri": { 22 + "type": "string", 23 + "description": "The URI of the album the song belongs to.", 24 + "format": "at-uri" 25 + }, 26 + "artist": { 27 + "type": "string", 28 + "description": "The artist of the song." 29 + }, 30 + "artistUri": { 31 + "type": "string", 32 + "description": "The URI of the artist of the song.", 33 + "format": "at-uri" 34 + }, 35 + "createdAt": { 36 + "type": "string", 37 + "description": "The timestamp when the song was created.", 38 + "format": "datetime" 39 + }, 40 + "discNumber": { 41 + "type": "integer", 42 + "description": "The disc number of the song in the album." 43 + }, 44 + "duration": { 45 + "type": "integer", 46 + "description": "The duration of the song in milliseconds." 47 + }, 48 + "id": { 49 + "type": "string", 50 + "description": "The unique identifier of the song." 51 + }, 52 + "playCount": { 53 + "type": "integer", 54 + "description": "The number of times the song has been played.", 55 + "minimum": 0 56 + }, 57 + "sha256": { 58 + "type": "string", 59 + "description": "The SHA256 hash of the song." 60 + }, 61 + "title": { 62 + "type": "string", 63 + "description": "The title of the song." 64 + }, 65 + "trackNumber": { 66 + "type": "integer", 67 + "description": "The track number of the song in the album." 68 + }, 69 + "uniqueListeners": { 70 + "type": "integer", 71 + "description": "The number of unique listeners who have played the song.", 72 + "minimum": 0 73 + }, 74 + "uri": { 75 + "type": "string", 76 + "description": "The URI of the song.", 77 + "format": "at-uri" 78 + } 79 + } 80 + }, 81 + "songViewDetailed": { 82 + "type": "object", 83 + "properties": { 84 + "album": { 85 + "type": "string", 86 + "description": "The album of the song." 87 + }, 88 + "albumArt": { 89 + "type": "string", 90 + "description": "The URL of the album art image.", 91 + "format": "uri" 92 + }, 93 + "albumArtist": { 94 + "type": "string", 95 + "description": "The artist of the album the song belongs to." 96 + }, 97 + "albumUri": { 98 + "type": "string", 99 + "description": "The URI of the album the song belongs to.", 100 + "format": "at-uri" 101 + }, 102 + "artist": { 103 + "type": "string", 104 + "description": "The artist of the song." 105 + }, 106 + "artistUri": { 107 + "type": "string", 108 + "description": "The URI of the artist of the song.", 109 + "format": "at-uri" 110 + }, 111 + "createdAt": { 112 + "type": "string", 113 + "description": "The timestamp when the song was created.", 114 + "format": "datetime" 115 + }, 116 + "discNumber": { 117 + "type": "integer", 118 + "description": "The disc number of the song in the album." 119 + }, 120 + "duration": { 121 + "type": "integer", 122 + "description": "The duration of the song in milliseconds." 123 + }, 124 + "id": { 125 + "type": "string", 126 + "description": "The unique identifier of the song." 127 + }, 128 + "playCount": { 129 + "type": "integer", 130 + "description": "The number of times the song has been played.", 131 + "minimum": 0 132 + }, 133 + "sha256": { 134 + "type": "string", 135 + "description": "The SHA256 hash of the song." 136 + }, 137 + "title": { 138 + "type": "string", 139 + "description": "The title of the song." 140 + }, 141 + "trackNumber": { 142 + "type": "integer", 143 + "description": "The track number of the song in the album." 144 + }, 145 + "uniqueListeners": { 146 + "type": "integer", 147 + "description": "The number of unique listeners who have played the song.", 148 + "minimum": 0 149 + }, 150 + "uri": { 151 + "type": "string", 152 + "description": "The URI of the song.", 153 + "format": "at-uri" 154 + } 155 + } 156 + } 157 + } 158 + }
+30
crates/jacquard-api/lexicons/app_rocksky_song_getSong.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.song.getSong", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get a song by its uri", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "uri": { 15 + "type": "string", 16 + "description": "The unique identifier of the song to retrieve", 17 + "format": "at-uri" 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "ref", 25 + "ref": "app.rocksky.song.defs#songViewDetailed" 26 + } 27 + } 28 + } 29 + } 30 + }
+40
crates/jacquard-api/lexicons/app_rocksky_song_getSongs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.song.getSongs", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get songs", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "limit": { 12 + "type": "integer", 13 + "description": "The maximum number of songs to return", 14 + "minimum": 1 15 + }, 16 + "offset": { 17 + "type": "integer", 18 + "description": "The offset for pagination", 19 + "minimum": 0 20 + } 21 + } 22 + }, 23 + "output": { 24 + "encoding": "application/json", 25 + "schema": { 26 + "type": "object", 27 + "properties": { 28 + "songs": { 29 + "type": "array", 30 + "items": { 31 + "type": "ref", 32 + "ref": "app.rocksky.song.defs#songViewBasic" 33 + } 34 + } 35 + } 36 + } 37 + } 38 + } 39 + } 40 + }
+35
crates/jacquard-api/lexicons/app_rocksky_spotify_defs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.spotify.defs", 4 + "defs": { 5 + "spotifyTrackView": { 6 + "type": "object", 7 + "properties": { 8 + "album": { 9 + "type": "string", 10 + "description": "The name of the album." 11 + }, 12 + "artist": { 13 + "type": "string", 14 + "description": "The name of the artist." 15 + }, 16 + "duration": { 17 + "type": "integer", 18 + "description": "The duration of the track in milliseconds." 19 + }, 20 + "id": { 21 + "type": "string", 22 + "description": "The unique identifier of the Spotify track." 23 + }, 24 + "name": { 25 + "type": "string", 26 + "description": "The name of the track." 27 + }, 28 + "previewUrl": { 29 + "type": "string", 30 + "description": "A URL to a preview of the track." 31 + } 32 + } 33 + } 34 + } 35 + }
+27
crates/jacquard-api/lexicons/app_rocksky_spotify_getCurrentlyPlaying.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.spotify.getCurrentlyPlaying", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get the currently playing track", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "actor": { 12 + "type": "string", 13 + "description": "Handle or DID of the actor to retrieve the currently playing track for. If not provided, defaults to the current user.", 14 + "format": "at-identifier" 15 + } 16 + } 17 + }, 18 + "output": { 19 + "encoding": "application/json", 20 + "schema": { 21 + "type": "ref", 22 + "ref": "app.rocksky.player.defs#currentlyPlayingViewDetailed" 23 + } 24 + } 25 + } 26 + } 27 + }
+10
crates/jacquard-api/lexicons/app_rocksky_spotify_next.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.spotify.next", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Play the next track in the queue" 8 + } 9 + } 10 + }
+10
crates/jacquard-api/lexicons/app_rocksky_spotify_pause.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.spotify.pause", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Pause the currently playing track" 8 + } 9 + } 10 + }
+10
crates/jacquard-api/lexicons/app_rocksky_spotify_play.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.spotify.play", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Resume playback of the currently paused track" 8 + } 9 + } 10 + }
+10
crates/jacquard-api/lexicons/app_rocksky_spotify_previous.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.spotify.previous", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Play the previous track in the queue" 8 + } 9 + } 10 + }
+22
crates/jacquard-api/lexicons/app_rocksky_spotify_seek.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.spotify.seek", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Seek to a specific position in the currently playing track", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "position" 12 + ], 13 + "properties": { 14 + "position": { 15 + "type": "integer", 16 + "description": "The position in seconds to seek to" 17 + } 18 + } 19 + } 20 + } 21 + } 22 + }
+31
crates/jacquard-api/lexicons/app_rocksky_stats_defs.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.stats.defs", 4 + "defs": { 5 + "statsView": { 6 + "type": "object", 7 + "properties": { 8 + "albums": { 9 + "type": "integer", 10 + "description": "The total number of unique albums scrobbled." 11 + }, 12 + "artists": { 13 + "type": "integer", 14 + "description": "The total number of unique artists scrobbled." 15 + }, 16 + "lovedTracks": { 17 + "type": "integer", 18 + "description": "The total number of tracks marked as loved." 19 + }, 20 + "scrobbles": { 21 + "type": "integer", 22 + "description": "The total number of scrobbles." 23 + }, 24 + "tracks": { 25 + "type": "integer", 26 + "description": "The total number of unique tracks scrobbled." 27 + } 28 + } 29 + } 30 + } 31 + }
+29
crates/jacquard-api/lexicons/app_rocksky_stats_getStats.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.stats.getStats", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": [ 10 + "did" 11 + ], 12 + "properties": { 13 + "did": { 14 + "type": "string", 15 + "description": "The DID or handle of the user to get stats for.", 16 + "format": "at-identifier" 17 + } 18 + } 19 + }, 20 + "output": { 21 + "encoding": "application/json", 22 + "schema": { 23 + "type": "ref", 24 + "ref": "app.rocksky.stats.defs#statsView" 25 + } 26 + } 27 + } 28 + } 29 + }
+106
crates/jacquard-api/lexicons/net_altq_aqfile.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "net.altq.aqfile", 4 + "description": "A record for uploading and tracking binary blob files with metadata.", 5 + "defs": { 6 + "checksum": { 7 + "type": "object", 8 + "description": "Cryptographic checksum for integrity verification.", 9 + "required": [ 10 + "algo", 11 + "hash" 12 + ], 13 + "properties": { 14 + "algo": { 15 + "type": "string", 16 + "description": "Hash algorithm name.", 17 + "maxLength": 32, 18 + "knownValues": [ 19 + "sha256", 20 + "sha512", 21 + "blake3" 22 + ] 23 + }, 24 + "hash": { 25 + "type": "string", 26 + "description": "Hex or base64 encoded digest produced by the algorithm.", 27 + "maxLength": 128 28 + } 29 + } 30 + }, 31 + "file": { 32 + "type": "object", 33 + "description": "File metadata describing the uploaded blob.", 34 + "required": [ 35 + "name", 36 + "size" 37 + ], 38 + "properties": { 39 + "mimeType": { 40 + "type": "string", 41 + "description": "MIME type, e.g. 'video/mp4'.", 42 + "maxLength": 255 43 + }, 44 + "modifiedAt": { 45 + "type": "string", 46 + "description": "Client-side last-modified timestamp.", 47 + "format": "datetime" 48 + }, 49 + "name": { 50 + "type": "string", 51 + "description": "User-visible filename.", 52 + "maxLength": 512 53 + }, 54 + "size": { 55 + "type": "integer", 56 + "description": "File size in bytes.", 57 + "minimum": 0, 58 + "maximum": 1000000000 59 + } 60 + } 61 + }, 62 + "main": { 63 + "type": "record", 64 + "description": "A record representing an uploaded file blob with metadata.", 65 + "key": "any", 66 + "record": { 67 + "type": "object", 68 + "required": [ 69 + "blob", 70 + "createdAt", 71 + "file" 72 + ], 73 + "properties": { 74 + "attribution": { 75 + "type": "string", 76 + "description": "Handle or DID of the account to attribute this upload to.", 77 + "format": "at-identifier" 78 + }, 79 + "blob": { 80 + "type": "blob", 81 + "description": "The uploaded blob reference. Note: Individual PDS instances may enforce lower size limits.", 82 + "accept": [ 83 + "*/*" 84 + ], 85 + "maxSize": 1000000000 86 + }, 87 + "checksum": { 88 + "type": "ref", 89 + "description": "Optional cryptographic checksum for integrity verification.", 90 + "ref": "#checksum" 91 + }, 92 + "createdAt": { 93 + "type": "string", 94 + "description": "Timestamp when this record was created.", 95 + "format": "datetime" 96 + }, 97 + "file": { 98 + "type": "ref", 99 + "description": "Metadata about the file.", 100 + "ref": "#file" 101 + } 102 + } 103 + } 104 + } 105 + } 106 + }
+73
crates/jacquard-api/src/app_rocksky/actor/get_actor_albums.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.actor.getActorAlbums 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetActorAlbums<'a> { 21 + #[serde(borrow)] 22 + pub did: jacquard_common::types::ident::AtIdentifier<'a>, 23 + ///(min: 1) 24 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 25 + pub limit: std::option::Option<i64>, 26 + ///(min: 0) 27 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 28 + pub offset: std::option::Option<i64>, 29 + } 30 + 31 + #[jacquard_derive::lexicon] 32 + #[derive( 33 + serde::Serialize, 34 + serde::Deserialize, 35 + Debug, 36 + Clone, 37 + PartialEq, 38 + Eq, 39 + jacquard_derive::IntoStatic, 40 + Default 41 + )] 42 + #[serde(rename_all = "camelCase")] 43 + pub struct GetActorAlbumsOutput<'a> { 44 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 45 + #[serde(borrow)] 46 + pub albums: std::option::Option<Vec<crate::app_rocksky::album::AlbumViewBasic<'a>>>, 47 + } 48 + 49 + ///Response type for 50 + ///app.rocksky.actor.getActorAlbums 51 + pub struct GetActorAlbumsResponse; 52 + impl jacquard_common::xrpc::XrpcResp for GetActorAlbumsResponse { 53 + const NSID: &'static str = "app.rocksky.actor.getActorAlbums"; 54 + const ENCODING: &'static str = "application/json"; 55 + type Output<'de> = GetActorAlbumsOutput<'de>; 56 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 57 + } 58 + 59 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetActorAlbums<'a> { 60 + const NSID: &'static str = "app.rocksky.actor.getActorAlbums"; 61 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 62 + type Response = GetActorAlbumsResponse; 63 + } 64 + 65 + ///Endpoint type for 66 + ///app.rocksky.actor.getActorAlbums 67 + pub struct GetActorAlbumsRequest; 68 + impl jacquard_common::xrpc::XrpcEndpoint for GetActorAlbumsRequest { 69 + const PATH: &'static str = "/xrpc/app.rocksky.actor.getActorAlbums"; 70 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 71 + type Request<'de> = GetActorAlbums<'de>; 72 + type Response = GetActorAlbumsResponse; 73 + }
+75
crates/jacquard-api/src/app_rocksky/actor/get_actor_artists.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.actor.getActorArtists 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetActorArtists<'a> { 21 + #[serde(borrow)] 22 + pub did: jacquard_common::types::ident::AtIdentifier<'a>, 23 + ///(min: 1) 24 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 25 + pub limit: std::option::Option<i64>, 26 + ///(min: 0) 27 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 28 + pub offset: std::option::Option<i64>, 29 + } 30 + 31 + #[jacquard_derive::lexicon] 32 + #[derive( 33 + serde::Serialize, 34 + serde::Deserialize, 35 + Debug, 36 + Clone, 37 + PartialEq, 38 + Eq, 39 + jacquard_derive::IntoStatic, 40 + Default 41 + )] 42 + #[serde(rename_all = "camelCase")] 43 + pub struct GetActorArtistsOutput<'a> { 44 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 45 + #[serde(borrow)] 46 + pub artists: std::option::Option< 47 + Vec<crate::app_rocksky::artist::ArtistViewBasic<'a>>, 48 + >, 49 + } 50 + 51 + ///Response type for 52 + ///app.rocksky.actor.getActorArtists 53 + pub struct GetActorArtistsResponse; 54 + impl jacquard_common::xrpc::XrpcResp for GetActorArtistsResponse { 55 + const NSID: &'static str = "app.rocksky.actor.getActorArtists"; 56 + const ENCODING: &'static str = "application/json"; 57 + type Output<'de> = GetActorArtistsOutput<'de>; 58 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 59 + } 60 + 61 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetActorArtists<'a> { 62 + const NSID: &'static str = "app.rocksky.actor.getActorArtists"; 63 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 64 + type Response = GetActorArtistsResponse; 65 + } 66 + 67 + ///Endpoint type for 68 + ///app.rocksky.actor.getActorArtists 69 + pub struct GetActorArtistsRequest; 70 + impl jacquard_common::xrpc::XrpcEndpoint for GetActorArtistsRequest { 71 + const PATH: &'static str = "/xrpc/app.rocksky.actor.getActorArtists"; 72 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 73 + type Request<'de> = GetActorArtists<'de>; 74 + type Response = GetActorArtistsResponse; 75 + }
+73
crates/jacquard-api/src/app_rocksky/actor/get_actor_loved_songs.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.actor.getActorLovedSongs 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetActorLovedSongs<'a> { 21 + #[serde(borrow)] 22 + pub did: jacquard_common::types::ident::AtIdentifier<'a>, 23 + ///(min: 1) 24 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 25 + pub limit: std::option::Option<i64>, 26 + ///(min: 0) 27 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 28 + pub offset: std::option::Option<i64>, 29 + } 30 + 31 + #[jacquard_derive::lexicon] 32 + #[derive( 33 + serde::Serialize, 34 + serde::Deserialize, 35 + Debug, 36 + Clone, 37 + PartialEq, 38 + Eq, 39 + jacquard_derive::IntoStatic, 40 + Default 41 + )] 42 + #[serde(rename_all = "camelCase")] 43 + pub struct GetActorLovedSongsOutput<'a> { 44 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 45 + #[serde(borrow)] 46 + pub tracks: std::option::Option<Vec<crate::app_rocksky::song::SongViewBasic<'a>>>, 47 + } 48 + 49 + ///Response type for 50 + ///app.rocksky.actor.getActorLovedSongs 51 + pub struct GetActorLovedSongsResponse; 52 + impl jacquard_common::xrpc::XrpcResp for GetActorLovedSongsResponse { 53 + const NSID: &'static str = "app.rocksky.actor.getActorLovedSongs"; 54 + const ENCODING: &'static str = "application/json"; 55 + type Output<'de> = GetActorLovedSongsOutput<'de>; 56 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 57 + } 58 + 59 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetActorLovedSongs<'a> { 60 + const NSID: &'static str = "app.rocksky.actor.getActorLovedSongs"; 61 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 62 + type Response = GetActorLovedSongsResponse; 63 + } 64 + 65 + ///Endpoint type for 66 + ///app.rocksky.actor.getActorLovedSongs 67 + pub struct GetActorLovedSongsRequest; 68 + impl jacquard_common::xrpc::XrpcEndpoint for GetActorLovedSongsRequest { 69 + const PATH: &'static str = "/xrpc/app.rocksky.actor.getActorLovedSongs"; 70 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 71 + type Request<'de> = GetActorLovedSongs<'de>; 72 + type Response = GetActorLovedSongsResponse; 73 + }
+75
crates/jacquard-api/src/app_rocksky/actor/get_actor_playlists.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.actor.getActorPlaylists 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetActorPlaylists<'a> { 21 + #[serde(borrow)] 22 + pub did: jacquard_common::types::ident::AtIdentifier<'a>, 23 + ///(min: 1) 24 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 25 + pub limit: std::option::Option<i64>, 26 + ///(min: 0) 27 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 28 + pub offset: std::option::Option<i64>, 29 + } 30 + 31 + #[jacquard_derive::lexicon] 32 + #[derive( 33 + serde::Serialize, 34 + serde::Deserialize, 35 + Debug, 36 + Clone, 37 + PartialEq, 38 + Eq, 39 + jacquard_derive::IntoStatic, 40 + Default 41 + )] 42 + #[serde(rename_all = "camelCase")] 43 + pub struct GetActorPlaylistsOutput<'a> { 44 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 45 + #[serde(borrow)] 46 + pub playlists: std::option::Option< 47 + Vec<crate::app_rocksky::playlist::PlaylistViewBasic<'a>>, 48 + >, 49 + } 50 + 51 + ///Response type for 52 + ///app.rocksky.actor.getActorPlaylists 53 + pub struct GetActorPlaylistsResponse; 54 + impl jacquard_common::xrpc::XrpcResp for GetActorPlaylistsResponse { 55 + const NSID: &'static str = "app.rocksky.actor.getActorPlaylists"; 56 + const ENCODING: &'static str = "application/json"; 57 + type Output<'de> = GetActorPlaylistsOutput<'de>; 58 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 59 + } 60 + 61 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetActorPlaylists<'a> { 62 + const NSID: &'static str = "app.rocksky.actor.getActorPlaylists"; 63 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 64 + type Response = GetActorPlaylistsResponse; 65 + } 66 + 67 + ///Endpoint type for 68 + ///app.rocksky.actor.getActorPlaylists 69 + pub struct GetActorPlaylistsRequest; 70 + impl jacquard_common::xrpc::XrpcEndpoint for GetActorPlaylistsRequest { 71 + const PATH: &'static str = "/xrpc/app.rocksky.actor.getActorPlaylists"; 72 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 73 + type Request<'de> = GetActorPlaylists<'de>; 74 + type Response = GetActorPlaylistsResponse; 75 + }
+75
crates/jacquard-api/src/app_rocksky/actor/get_actor_scrobbles.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.actor.getActorScrobbles 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetActorScrobbles<'a> { 21 + #[serde(borrow)] 22 + pub did: jacquard_common::types::ident::AtIdentifier<'a>, 23 + ///(min: 1) 24 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 25 + pub limit: std::option::Option<i64>, 26 + ///(min: 0) 27 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 28 + pub offset: std::option::Option<i64>, 29 + } 30 + 31 + #[jacquard_derive::lexicon] 32 + #[derive( 33 + serde::Serialize, 34 + serde::Deserialize, 35 + Debug, 36 + Clone, 37 + PartialEq, 38 + Eq, 39 + jacquard_derive::IntoStatic, 40 + Default 41 + )] 42 + #[serde(rename_all = "camelCase")] 43 + pub struct GetActorScrobblesOutput<'a> { 44 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 45 + #[serde(borrow)] 46 + pub scrobbles: std::option::Option< 47 + Vec<crate::app_rocksky::scrobble::ScrobbleViewBasic<'a>>, 48 + >, 49 + } 50 + 51 + ///Response type for 52 + ///app.rocksky.actor.getActorScrobbles 53 + pub struct GetActorScrobblesResponse; 54 + impl jacquard_common::xrpc::XrpcResp for GetActorScrobblesResponse { 55 + const NSID: &'static str = "app.rocksky.actor.getActorScrobbles"; 56 + const ENCODING: &'static str = "application/json"; 57 + type Output<'de> = GetActorScrobblesOutput<'de>; 58 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 59 + } 60 + 61 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetActorScrobbles<'a> { 62 + const NSID: &'static str = "app.rocksky.actor.getActorScrobbles"; 63 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 64 + type Response = GetActorScrobblesResponse; 65 + } 66 + 67 + ///Endpoint type for 68 + ///app.rocksky.actor.getActorScrobbles 69 + pub struct GetActorScrobblesRequest; 70 + impl jacquard_common::xrpc::XrpcEndpoint for GetActorScrobblesRequest { 71 + const PATH: &'static str = "/xrpc/app.rocksky.actor.getActorScrobbles"; 72 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 73 + type Request<'de> = GetActorScrobbles<'de>; 74 + type Response = GetActorScrobblesResponse; 75 + }
+73
crates/jacquard-api/src/app_rocksky/actor/get_actor_songs.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.actor.getActorSongs 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetActorSongs<'a> { 21 + #[serde(borrow)] 22 + pub did: jacquard_common::types::ident::AtIdentifier<'a>, 23 + ///(min: 1) 24 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 25 + pub limit: std::option::Option<i64>, 26 + ///(min: 0) 27 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 28 + pub offset: std::option::Option<i64>, 29 + } 30 + 31 + #[jacquard_derive::lexicon] 32 + #[derive( 33 + serde::Serialize, 34 + serde::Deserialize, 35 + Debug, 36 + Clone, 37 + PartialEq, 38 + Eq, 39 + jacquard_derive::IntoStatic, 40 + Default 41 + )] 42 + #[serde(rename_all = "camelCase")] 43 + pub struct GetActorSongsOutput<'a> { 44 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 45 + #[serde(borrow)] 46 + pub songs: std::option::Option<Vec<crate::app_rocksky::song::SongViewBasic<'a>>>, 47 + } 48 + 49 + ///Response type for 50 + ///app.rocksky.actor.getActorSongs 51 + pub struct GetActorSongsResponse; 52 + impl jacquard_common::xrpc::XrpcResp for GetActorSongsResponse { 53 + const NSID: &'static str = "app.rocksky.actor.getActorSongs"; 54 + const ENCODING: &'static str = "application/json"; 55 + type Output<'de> = GetActorSongsOutput<'de>; 56 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 57 + } 58 + 59 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetActorSongs<'a> { 60 + const NSID: &'static str = "app.rocksky.actor.getActorSongs"; 61 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 62 + type Response = GetActorSongsResponse; 63 + } 64 + 65 + ///Endpoint type for 66 + ///app.rocksky.actor.getActorSongs 67 + pub struct GetActorSongsRequest; 68 + impl jacquard_common::xrpc::XrpcEndpoint for GetActorSongsRequest { 69 + const PATH: &'static str = "/xrpc/app.rocksky.actor.getActorSongs"; 70 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 71 + type Request<'de> = GetActorSongs<'de>; 72 + type Response = GetActorSongsResponse; 73 + }
+67
crates/jacquard-api/src/app_rocksky/actor/get_profile.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.actor.getProfile 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetProfile<'a> { 21 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 22 + #[serde(borrow)] 23 + pub did: std::option::Option<jacquard_common::types::ident::AtIdentifier<'a>>, 24 + } 25 + 26 + #[jacquard_derive::lexicon] 27 + #[derive( 28 + serde::Serialize, 29 + serde::Deserialize, 30 + Debug, 31 + Clone, 32 + PartialEq, 33 + Eq, 34 + jacquard_derive::IntoStatic 35 + )] 36 + #[serde(rename_all = "camelCase")] 37 + pub struct GetProfileOutput<'a> { 38 + #[serde(flatten)] 39 + #[serde(borrow)] 40 + pub value: crate::app_rocksky::actor::ProfileViewDetailed<'a>, 41 + } 42 + 43 + ///Response type for 44 + ///app.rocksky.actor.getProfile 45 + pub struct GetProfileResponse; 46 + impl jacquard_common::xrpc::XrpcResp for GetProfileResponse { 47 + const NSID: &'static str = "app.rocksky.actor.getProfile"; 48 + const ENCODING: &'static str = "application/json"; 49 + type Output<'de> = GetProfileOutput<'de>; 50 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 51 + } 52 + 53 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetProfile<'a> { 54 + const NSID: &'static str = "app.rocksky.actor.getProfile"; 55 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 56 + type Response = GetProfileResponse; 57 + } 58 + 59 + ///Endpoint type for 60 + ///app.rocksky.actor.getProfile 61 + pub struct GetProfileRequest; 62 + impl jacquard_common::xrpc::XrpcEndpoint for GetProfileRequest { 63 + const PATH: &'static str = "/xrpc/app.rocksky.actor.getProfile"; 64 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 65 + type Request<'de> = GetProfile<'de>; 66 + type Response = GetProfileResponse; 67 + }
+96
crates/jacquard-api/src/app_rocksky/actor.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.actor.defs 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + pub mod get_actor_albums; 9 + pub mod get_actor_artists; 10 + pub mod get_actor_loved_songs; 11 + pub mod get_actor_playlists; 12 + pub mod get_actor_scrobbles; 13 + pub mod get_actor_songs; 14 + pub mod get_profile; 15 + 16 + #[jacquard_derive::lexicon] 17 + #[derive( 18 + serde::Serialize, 19 + serde::Deserialize, 20 + Debug, 21 + Clone, 22 + PartialEq, 23 + Eq, 24 + jacquard_derive::IntoStatic, 25 + Default 26 + )] 27 + #[serde(rename_all = "camelCase")] 28 + pub struct ProfileViewBasic<'a> { 29 + /// The URL of the actor's avatar image. 30 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 31 + #[serde(borrow)] 32 + pub avatar: std::option::Option<jacquard_common::types::string::Uri<'a>>, 33 + /// The date and time when the actor was created. 34 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 35 + pub created_at: std::option::Option<jacquard_common::types::string::Datetime>, 36 + /// The DID of the actor. 37 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 38 + #[serde(borrow)] 39 + pub did: std::option::Option<jacquard_common::CowStr<'a>>, 40 + /// The display name of the actor. 41 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 42 + #[serde(borrow)] 43 + pub display_name: std::option::Option<jacquard_common::CowStr<'a>>, 44 + /// The handle of the actor. 45 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 46 + #[serde(borrow)] 47 + pub handle: std::option::Option<jacquard_common::CowStr<'a>>, 48 + /// The unique identifier of the actor. 49 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 50 + #[serde(borrow)] 51 + pub id: std::option::Option<jacquard_common::CowStr<'a>>, 52 + /// The date and time when the actor was last updated. 53 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 54 + pub updated_at: std::option::Option<jacquard_common::types::string::Datetime>, 55 + } 56 + 57 + #[jacquard_derive::lexicon] 58 + #[derive( 59 + serde::Serialize, 60 + serde::Deserialize, 61 + Debug, 62 + Clone, 63 + PartialEq, 64 + Eq, 65 + jacquard_derive::IntoStatic, 66 + Default 67 + )] 68 + #[serde(rename_all = "camelCase")] 69 + pub struct ProfileViewDetailed<'a> { 70 + /// The URL of the actor's avatar image. 71 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 72 + #[serde(borrow)] 73 + pub avatar: std::option::Option<jacquard_common::types::string::Uri<'a>>, 74 + /// The date and time when the actor was created. 75 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 76 + pub created_at: std::option::Option<jacquard_common::types::string::Datetime>, 77 + /// The DID of the actor. 78 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 79 + #[serde(borrow)] 80 + pub did: std::option::Option<jacquard_common::CowStr<'a>>, 81 + /// The display name of the actor. 82 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 83 + #[serde(borrow)] 84 + pub display_name: std::option::Option<jacquard_common::CowStr<'a>>, 85 + /// The handle of the actor. 86 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 87 + #[serde(borrow)] 88 + pub handle: std::option::Option<jacquard_common::CowStr<'a>>, 89 + /// The unique identifier of the actor. 90 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 91 + #[serde(borrow)] 92 + pub id: std::option::Option<jacquard_common::CowStr<'a>>, 93 + /// The date and time when the actor was last updated. 94 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 95 + pub updated_at: std::option::Option<jacquard_common::types::string::Datetime>, 96 + }
+66
crates/jacquard-api/src/app_rocksky/album/get_album.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.album.getAlbum 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetAlbum<'a> { 21 + #[serde(borrow)] 22 + pub uri: jacquard_common::types::string::AtUri<'a>, 23 + } 24 + 25 + #[jacquard_derive::lexicon] 26 + #[derive( 27 + serde::Serialize, 28 + serde::Deserialize, 29 + Debug, 30 + Clone, 31 + PartialEq, 32 + Eq, 33 + jacquard_derive::IntoStatic 34 + )] 35 + #[serde(rename_all = "camelCase")] 36 + pub struct GetAlbumOutput<'a> { 37 + #[serde(flatten)] 38 + #[serde(borrow)] 39 + pub value: crate::app_rocksky::album::AlbumViewDetailed<'a>, 40 + } 41 + 42 + ///Response type for 43 + ///app.rocksky.album.getAlbum 44 + pub struct GetAlbumResponse; 45 + impl jacquard_common::xrpc::XrpcResp for GetAlbumResponse { 46 + const NSID: &'static str = "app.rocksky.album.getAlbum"; 47 + const ENCODING: &'static str = "application/json"; 48 + type Output<'de> = GetAlbumOutput<'de>; 49 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 50 + } 51 + 52 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetAlbum<'a> { 53 + const NSID: &'static str = "app.rocksky.album.getAlbum"; 54 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 55 + type Response = GetAlbumResponse; 56 + } 57 + 58 + ///Endpoint type for 59 + ///app.rocksky.album.getAlbum 60 + pub struct GetAlbumRequest; 61 + impl jacquard_common::xrpc::XrpcEndpoint for GetAlbumRequest { 62 + const PATH: &'static str = "/xrpc/app.rocksky.album.getAlbum"; 63 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 64 + type Request<'de> = GetAlbum<'de>; 65 + type Response = GetAlbumResponse; 66 + }
+67
crates/jacquard-api/src/app_rocksky/album/get_album_tracks.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.album.getAlbumTracks 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetAlbumTracks<'a> { 21 + #[serde(borrow)] 22 + pub uri: jacquard_common::types::string::AtUri<'a>, 23 + } 24 + 25 + #[jacquard_derive::lexicon] 26 + #[derive( 27 + serde::Serialize, 28 + serde::Deserialize, 29 + Debug, 30 + Clone, 31 + PartialEq, 32 + Eq, 33 + jacquard_derive::IntoStatic, 34 + Default 35 + )] 36 + #[serde(rename_all = "camelCase")] 37 + pub struct GetAlbumTracksOutput<'a> { 38 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 39 + #[serde(borrow)] 40 + pub tracks: std::option::Option<Vec<crate::app_rocksky::song::SongViewBasic<'a>>>, 41 + } 42 + 43 + ///Response type for 44 + ///app.rocksky.album.getAlbumTracks 45 + pub struct GetAlbumTracksResponse; 46 + impl jacquard_common::xrpc::XrpcResp for GetAlbumTracksResponse { 47 + const NSID: &'static str = "app.rocksky.album.getAlbumTracks"; 48 + const ENCODING: &'static str = "application/json"; 49 + type Output<'de> = GetAlbumTracksOutput<'de>; 50 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 51 + } 52 + 53 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetAlbumTracks<'a> { 54 + const NSID: &'static str = "app.rocksky.album.getAlbumTracks"; 55 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 56 + type Response = GetAlbumTracksResponse; 57 + } 58 + 59 + ///Endpoint type for 60 + ///app.rocksky.album.getAlbumTracks 61 + pub struct GetAlbumTracksRequest; 62 + impl jacquard_common::xrpc::XrpcEndpoint for GetAlbumTracksRequest { 63 + const PATH: &'static str = "/xrpc/app.rocksky.album.getAlbumTracks"; 64 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 65 + type Request<'de> = GetAlbumTracks<'de>; 66 + type Response = GetAlbumTracksResponse; 67 + }
+71
crates/jacquard-api/src/app_rocksky/album/get_albums.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.album.getAlbums 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetAlbums { 21 + ///(min: 1) 22 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 23 + pub limit: std::option::Option<i64>, 24 + ///(min: 0) 25 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 26 + pub offset: std::option::Option<i64>, 27 + } 28 + 29 + #[jacquard_derive::lexicon] 30 + #[derive( 31 + serde::Serialize, 32 + serde::Deserialize, 33 + Debug, 34 + Clone, 35 + PartialEq, 36 + Eq, 37 + jacquard_derive::IntoStatic, 38 + Default 39 + )] 40 + #[serde(rename_all = "camelCase")] 41 + pub struct GetAlbumsOutput<'a> { 42 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 43 + #[serde(borrow)] 44 + pub albums: std::option::Option<Vec<crate::app_rocksky::album::AlbumViewBasic<'a>>>, 45 + } 46 + 47 + ///Response type for 48 + ///app.rocksky.album.getAlbums 49 + pub struct GetAlbumsResponse; 50 + impl jacquard_common::xrpc::XrpcResp for GetAlbumsResponse { 51 + const NSID: &'static str = "app.rocksky.album.getAlbums"; 52 + const ENCODING: &'static str = "application/json"; 53 + type Output<'de> = GetAlbumsOutput<'de>; 54 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 55 + } 56 + 57 + impl jacquard_common::xrpc::XrpcRequest for GetAlbums { 58 + const NSID: &'static str = "app.rocksky.album.getAlbums"; 59 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 60 + type Response = GetAlbumsResponse; 61 + } 62 + 63 + ///Endpoint type for 64 + ///app.rocksky.album.getAlbums 65 + pub struct GetAlbumsRequest; 66 + impl jacquard_common::xrpc::XrpcEndpoint for GetAlbumsRequest { 67 + const PATH: &'static str = "/xrpc/app.rocksky.album.getAlbums"; 68 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 69 + type Request<'de> = GetAlbums; 70 + type Response = GetAlbumsResponse; 71 + }
+240
crates/jacquard-api/src/app_rocksky/album.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.album.defs 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + pub mod get_album; 9 + pub mod get_album_tracks; 10 + pub mod get_albums; 11 + 12 + /// A declaration of an album. 13 + #[jacquard_derive::lexicon] 14 + #[derive( 15 + serde::Serialize, 16 + serde::Deserialize, 17 + Debug, 18 + Clone, 19 + PartialEq, 20 + Eq, 21 + jacquard_derive::IntoStatic, 22 + bon::Builder 23 + )] 24 + #[serde(rename_all = "camelCase")] 25 + pub struct Album<'a> { 26 + /// The album art of the album. 27 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 28 + #[builder(into)] 29 + #[serde(borrow)] 30 + pub album_art: Option<jacquard_common::types::blob::Blob<'a>>, 31 + /// The Apple Music link of the album. 32 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 33 + #[builder(into)] 34 + #[serde(borrow)] 35 + pub apple_music_link: Option<jacquard_common::types::string::Uri<'a>>, 36 + /// The artist of the album. 37 + #[serde(borrow)] 38 + #[builder(into)] 39 + pub artist: jacquard_common::CowStr<'a>, 40 + /// The date and time when the album was created. 41 + pub created_at: jacquard_common::types::string::Datetime, 42 + /// The duration of the album in seconds. 43 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 44 + #[builder(into)] 45 + pub duration: Option<i64>, 46 + /// The genre of the album. 47 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 48 + #[builder(into)] 49 + #[serde(borrow)] 50 + pub genre: Option<jacquard_common::CowStr<'a>>, 51 + /// The release date of the album. 52 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 53 + #[builder(into)] 54 + pub release_date: Option<jacquard_common::types::string::Datetime>, 55 + /// The Spotify link of the album. 56 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 57 + #[builder(into)] 58 + #[serde(borrow)] 59 + pub spotify_link: Option<jacquard_common::types::string::Uri<'a>>, 60 + /// The tags of the album. 61 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 62 + #[builder(into)] 63 + #[serde(borrow)] 64 + pub tags: Option<Vec<jacquard_common::CowStr<'a>>>, 65 + /// The tidal link of the album. 66 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 67 + #[builder(into)] 68 + #[serde(borrow)] 69 + pub tidal_link: Option<jacquard_common::types::string::Uri<'a>>, 70 + /// The title of the album. 71 + #[serde(borrow)] 72 + #[builder(into)] 73 + pub title: jacquard_common::CowStr<'a>, 74 + /// The year the album was released. 75 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 76 + #[builder(into)] 77 + pub year: Option<i64>, 78 + /// The YouTube link of the album. 79 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 80 + #[builder(into)] 81 + #[serde(borrow)] 82 + pub youtube_link: Option<jacquard_common::types::string::Uri<'a>>, 83 + } 84 + 85 + /// Typed wrapper for GetRecord response with this collection's record type. 86 + #[derive( 87 + serde::Serialize, 88 + serde::Deserialize, 89 + Debug, 90 + Clone, 91 + PartialEq, 92 + Eq, 93 + jacquard_derive::IntoStatic 94 + )] 95 + #[serde(rename_all = "camelCase")] 96 + pub struct AlbumGetRecordOutput<'a> { 97 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 98 + #[serde(borrow)] 99 + pub cid: std::option::Option<jacquard_common::types::string::Cid<'a>>, 100 + #[serde(borrow)] 101 + pub uri: jacquard_common::types::string::AtUri<'a>, 102 + #[serde(borrow)] 103 + pub value: Album<'a>, 104 + } 105 + 106 + /// Marker type for deserializing records from this collection. 107 + pub struct AlbumRecord; 108 + impl jacquard_common::xrpc::XrpcResp for AlbumRecord { 109 + const NSID: &'static str = "app.rocksky.album"; 110 + const ENCODING: &'static str = "application/json"; 111 + type Output<'de> = AlbumGetRecordOutput<'de>; 112 + type Err<'de> = jacquard_common::types::collection::RecordError<'de>; 113 + } 114 + 115 + impl jacquard_common::types::collection::Collection for Album<'_> { 116 + const NSID: &'static str = "app.rocksky.album"; 117 + type Record = AlbumRecord; 118 + } 119 + 120 + impl From<AlbumGetRecordOutput<'_>> for Album<'_> { 121 + fn from(output: AlbumGetRecordOutput<'_>) -> Self { 122 + use jacquard_common::IntoStatic; 123 + output.value.into_static() 124 + } 125 + } 126 + 127 + #[jacquard_derive::lexicon] 128 + #[derive( 129 + serde::Serialize, 130 + serde::Deserialize, 131 + Debug, 132 + Clone, 133 + PartialEq, 134 + Eq, 135 + jacquard_derive::IntoStatic, 136 + Default 137 + )] 138 + #[serde(rename_all = "camelCase")] 139 + pub struct AlbumViewBasic<'a> { 140 + /// The URL of the album art image. 141 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 142 + #[serde(borrow)] 143 + pub album_art: std::option::Option<jacquard_common::types::string::Uri<'a>>, 144 + /// The artist of the album. 145 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 146 + #[serde(borrow)] 147 + pub artist: std::option::Option<jacquard_common::CowStr<'a>>, 148 + /// The URI of the album's artist. 149 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 150 + #[serde(borrow)] 151 + pub artist_uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 152 + /// The unique identifier of the album. 153 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 154 + #[serde(borrow)] 155 + pub id: std::option::Option<jacquard_common::CowStr<'a>>, 156 + /// The number of times the album has been played. 157 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 158 + pub play_count: std::option::Option<i64>, 159 + /// The release date of the album. 160 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 161 + #[serde(borrow)] 162 + pub release_date: std::option::Option<jacquard_common::CowStr<'a>>, 163 + /// The SHA256 hash of the album. 164 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 165 + #[serde(borrow)] 166 + pub sha256: std::option::Option<jacquard_common::CowStr<'a>>, 167 + /// The title of the album. 168 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 169 + #[serde(borrow)] 170 + pub title: std::option::Option<jacquard_common::CowStr<'a>>, 171 + /// The number of unique listeners who have played the album. 172 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 173 + pub unique_listeners: std::option::Option<i64>, 174 + /// The URI of the album. 175 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 176 + #[serde(borrow)] 177 + pub uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 178 + /// The year the album was released. 179 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 180 + pub year: std::option::Option<i64>, 181 + } 182 + 183 + #[jacquard_derive::lexicon] 184 + #[derive( 185 + serde::Serialize, 186 + serde::Deserialize, 187 + Debug, 188 + Clone, 189 + PartialEq, 190 + Eq, 191 + jacquard_derive::IntoStatic, 192 + Default 193 + )] 194 + #[serde(rename_all = "camelCase")] 195 + pub struct AlbumViewDetailed<'a> { 196 + /// The URL of the album art image. 197 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 198 + #[serde(borrow)] 199 + pub album_art: std::option::Option<jacquard_common::types::string::Uri<'a>>, 200 + /// The artist of the album. 201 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 202 + #[serde(borrow)] 203 + pub artist: std::option::Option<jacquard_common::CowStr<'a>>, 204 + /// The URI of the album's artist. 205 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 206 + #[serde(borrow)] 207 + pub artist_uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 208 + /// The unique identifier of the album. 209 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 210 + #[serde(borrow)] 211 + pub id: std::option::Option<jacquard_common::CowStr<'a>>, 212 + /// The number of times the album has been played. 213 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 214 + pub play_count: std::option::Option<i64>, 215 + /// The release date of the album. 216 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 217 + #[serde(borrow)] 218 + pub release_date: std::option::Option<jacquard_common::CowStr<'a>>, 219 + /// The SHA256 hash of the album. 220 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 221 + #[serde(borrow)] 222 + pub sha256: std::option::Option<jacquard_common::CowStr<'a>>, 223 + /// The title of the album. 224 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 225 + #[serde(borrow)] 226 + pub title: std::option::Option<jacquard_common::CowStr<'a>>, 227 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 228 + #[serde(borrow)] 229 + pub tracks: std::option::Option<Vec<jacquard_common::types::value::Data<'a>>>, 230 + /// The number of unique listeners who have played the album. 231 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 232 + pub unique_listeners: std::option::Option<i64>, 233 + /// The URI of the album. 234 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 235 + #[serde(borrow)] 236 + pub uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 237 + /// The year the album was released. 238 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 239 + pub year: std::option::Option<i64>, 240 + }
+75
crates/jacquard-api/src/app_rocksky/apikey/create_apikey.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.apikey.createApikey 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[jacquard_derive::lexicon] 9 + #[derive( 10 + serde::Serialize, 11 + serde::Deserialize, 12 + Debug, 13 + Clone, 14 + PartialEq, 15 + Eq, 16 + jacquard_derive::IntoStatic, 17 + Default 18 + )] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct CreateApikey<'a> { 21 + /// A description for the API key. 22 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 23 + #[serde(borrow)] 24 + pub description: std::option::Option<jacquard_common::CowStr<'a>>, 25 + /// The name of the API key. 26 + #[serde(borrow)] 27 + pub name: jacquard_common::CowStr<'a>, 28 + } 29 + 30 + #[jacquard_derive::lexicon] 31 + #[derive( 32 + serde::Serialize, 33 + serde::Deserialize, 34 + Debug, 35 + Clone, 36 + PartialEq, 37 + Eq, 38 + jacquard_derive::IntoStatic 39 + )] 40 + #[serde(rename_all = "camelCase")] 41 + pub struct CreateApikeyOutput<'a> { 42 + #[serde(flatten)] 43 + #[serde(borrow)] 44 + pub value: jacquard_common::types::value::Data<'a>, 45 + } 46 + 47 + ///Response type for 48 + ///app.rocksky.apikey.createApikey 49 + pub struct CreateApikeyResponse; 50 + impl jacquard_common::xrpc::XrpcResp for CreateApikeyResponse { 51 + const NSID: &'static str = "app.rocksky.apikey.createApikey"; 52 + const ENCODING: &'static str = "application/json"; 53 + type Output<'de> = CreateApikeyOutput<'de>; 54 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 55 + } 56 + 57 + impl<'a> jacquard_common::xrpc::XrpcRequest for CreateApikey<'a> { 58 + const NSID: &'static str = "app.rocksky.apikey.createApikey"; 59 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 60 + "application/json", 61 + ); 62 + type Response = CreateApikeyResponse; 63 + } 64 + 65 + ///Endpoint type for 66 + ///app.rocksky.apikey.createApikey 67 + pub struct CreateApikeyRequest; 68 + impl jacquard_common::xrpc::XrpcEndpoint for CreateApikeyRequest { 69 + const PATH: &'static str = "/xrpc/app.rocksky.apikey.createApikey"; 70 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 71 + "application/json", 72 + ); 73 + type Request<'de> = CreateApikey<'de>; 74 + type Response = CreateApikeyResponse; 75 + }
+69
crates/jacquard-api/src/app_rocksky/apikey/get_apikeys.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.apikey.getApikeys 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetApikeys { 21 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 22 + pub limit: std::option::Option<i64>, 23 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 24 + pub offset: std::option::Option<i64>, 25 + } 26 + 27 + #[jacquard_derive::lexicon] 28 + #[derive( 29 + serde::Serialize, 30 + serde::Deserialize, 31 + Debug, 32 + Clone, 33 + PartialEq, 34 + Eq, 35 + jacquard_derive::IntoStatic, 36 + Default 37 + )] 38 + #[serde(rename_all = "camelCase")] 39 + pub struct GetApikeysOutput<'a> { 40 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 41 + #[serde(borrow)] 42 + pub api_keys: std::option::Option<Vec<jacquard_common::types::value::Data<'a>>>, 43 + } 44 + 45 + ///Response type for 46 + ///app.rocksky.apikey.getApikeys 47 + pub struct GetApikeysResponse; 48 + impl jacquard_common::xrpc::XrpcResp for GetApikeysResponse { 49 + const NSID: &'static str = "app.rocksky.apikey.getApikeys"; 50 + const ENCODING: &'static str = "application/json"; 51 + type Output<'de> = GetApikeysOutput<'de>; 52 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 53 + } 54 + 55 + impl jacquard_common::xrpc::XrpcRequest for GetApikeys { 56 + const NSID: &'static str = "app.rocksky.apikey.getApikeys"; 57 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 58 + type Response = GetApikeysResponse; 59 + } 60 + 61 + ///Endpoint type for 62 + ///app.rocksky.apikey.getApikeys 63 + pub struct GetApikeysRequest; 64 + impl jacquard_common::xrpc::XrpcEndpoint for GetApikeysRequest { 65 + const PATH: &'static str = "/xrpc/app.rocksky.apikey.getApikeys"; 66 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 67 + type Request<'de> = GetApikeys; 68 + type Response = GetApikeysResponse; 69 + }
+83
crates/jacquard-api/src/app_rocksky/apikey/remove_apikey.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.apikey.removeApikey 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct RemoveApikeyParams<'a> { 21 + #[serde(borrow)] 22 + #[builder(into)] 23 + pub id: jacquard_common::CowStr<'a>, 24 + } 25 + 26 + #[jacquard_derive::lexicon] 27 + #[derive( 28 + serde::Serialize, 29 + serde::Deserialize, 30 + Debug, 31 + Clone, 32 + PartialEq, 33 + Eq, 34 + jacquard_derive::IntoStatic 35 + )] 36 + #[serde(rename_all = "camelCase")] 37 + pub struct RemoveApikeyOutput<'a> { 38 + #[serde(flatten)] 39 + #[serde(borrow)] 40 + pub value: jacquard_common::types::value::Data<'a>, 41 + } 42 + 43 + /// XRPC request marker type 44 + #[derive( 45 + Debug, 46 + Clone, 47 + Copy, 48 + PartialEq, 49 + Eq, 50 + serde::Serialize, 51 + serde::Deserialize, 52 + jacquard_derive::IntoStatic 53 + )] 54 + pub struct RemoveApikey; 55 + ///Response type for 56 + ///app.rocksky.apikey.removeApikey 57 + pub struct RemoveApikeyResponse; 58 + impl jacquard_common::xrpc::XrpcResp for RemoveApikeyResponse { 59 + const NSID: &'static str = "app.rocksky.apikey.removeApikey"; 60 + const ENCODING: &'static str = "application/json"; 61 + type Output<'de> = RemoveApikeyOutput<'de>; 62 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 63 + } 64 + 65 + impl jacquard_common::xrpc::XrpcRequest for RemoveApikey { 66 + const NSID: &'static str = "app.rocksky.apikey.removeApikey"; 67 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 68 + "application/json", 69 + ); 70 + type Response = RemoveApikeyResponse; 71 + } 72 + 73 + ///Endpoint type for 74 + ///app.rocksky.apikey.removeApikey 75 + pub struct RemoveApikeyRequest; 76 + impl jacquard_common::xrpc::XrpcEndpoint for RemoveApikeyRequest { 77 + const PATH: &'static str = "/xrpc/app.rocksky.apikey.removeApikey"; 78 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 79 + "application/json", 80 + ); 81 + type Request<'de> = RemoveApikey; 82 + type Response = RemoveApikeyResponse; 83 + }
+78
crates/jacquard-api/src/app_rocksky/apikey/update_apikey.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.apikey.updateApikey 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[jacquard_derive::lexicon] 9 + #[derive( 10 + serde::Serialize, 11 + serde::Deserialize, 12 + Debug, 13 + Clone, 14 + PartialEq, 15 + Eq, 16 + jacquard_derive::IntoStatic, 17 + Default 18 + )] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct UpdateApikey<'a> { 21 + /// A new description for the API key. 22 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 23 + #[serde(borrow)] 24 + pub description: std::option::Option<jacquard_common::CowStr<'a>>, 25 + /// The ID of the API key to update. 26 + #[serde(borrow)] 27 + pub id: jacquard_common::CowStr<'a>, 28 + /// The new name of the API key. 29 + #[serde(borrow)] 30 + pub name: jacquard_common::CowStr<'a>, 31 + } 32 + 33 + #[jacquard_derive::lexicon] 34 + #[derive( 35 + serde::Serialize, 36 + serde::Deserialize, 37 + Debug, 38 + Clone, 39 + PartialEq, 40 + Eq, 41 + jacquard_derive::IntoStatic 42 + )] 43 + #[serde(rename_all = "camelCase")] 44 + pub struct UpdateApikeyOutput<'a> { 45 + #[serde(flatten)] 46 + #[serde(borrow)] 47 + pub value: jacquard_common::types::value::Data<'a>, 48 + } 49 + 50 + ///Response type for 51 + ///app.rocksky.apikey.updateApikey 52 + pub struct UpdateApikeyResponse; 53 + impl jacquard_common::xrpc::XrpcResp for UpdateApikeyResponse { 54 + const NSID: &'static str = "app.rocksky.apikey.updateApikey"; 55 + const ENCODING: &'static str = "application/json"; 56 + type Output<'de> = UpdateApikeyOutput<'de>; 57 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 58 + } 59 + 60 + impl<'a> jacquard_common::xrpc::XrpcRequest for UpdateApikey<'a> { 61 + const NSID: &'static str = "app.rocksky.apikey.updateApikey"; 62 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 63 + "application/json", 64 + ); 65 + type Response = UpdateApikeyResponse; 66 + } 67 + 68 + ///Endpoint type for 69 + ///app.rocksky.apikey.updateApikey 70 + pub struct UpdateApikeyRequest; 71 + impl jacquard_common::xrpc::XrpcEndpoint for UpdateApikeyRequest { 72 + const PATH: &'static str = "/xrpc/app.rocksky.apikey.updateApikey"; 73 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 74 + "application/json", 75 + ); 76 + type Request<'de> = UpdateApikey<'de>; 77 + type Response = UpdateApikeyResponse; 78 + }
+41
crates/jacquard-api/src/app_rocksky/apikey.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.apikey.defs 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + pub mod create_apikey; 9 + pub mod get_apikeys; 10 + pub mod remove_apikey; 11 + pub mod update_apikey; 12 + 13 + #[jacquard_derive::lexicon] 14 + #[derive( 15 + serde::Serialize, 16 + serde::Deserialize, 17 + Debug, 18 + Clone, 19 + PartialEq, 20 + Eq, 21 + jacquard_derive::IntoStatic, 22 + Default 23 + )] 24 + #[serde(rename_all = "camelCase")] 25 + pub struct ApiKeyView<'a> { 26 + /// The date and time when the API key was created. 27 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 28 + pub created_at: std::option::Option<jacquard_common::types::string::Datetime>, 29 + /// A description for the API key. 30 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 31 + #[serde(borrow)] 32 + pub description: std::option::Option<jacquard_common::CowStr<'a>>, 33 + /// The unique identifier of the API key. 34 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 35 + #[serde(borrow)] 36 + pub id: std::option::Option<jacquard_common::CowStr<'a>>, 37 + /// The name of the API key. 38 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 39 + #[serde(borrow)] 40 + pub name: std::option::Option<jacquard_common::CowStr<'a>>, 41 + }
+66
crates/jacquard-api/src/app_rocksky/artist/get_artist.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.artist.getArtist 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetArtist<'a> { 21 + #[serde(borrow)] 22 + pub uri: jacquard_common::types::string::AtUri<'a>, 23 + } 24 + 25 + #[jacquard_derive::lexicon] 26 + #[derive( 27 + serde::Serialize, 28 + serde::Deserialize, 29 + Debug, 30 + Clone, 31 + PartialEq, 32 + Eq, 33 + jacquard_derive::IntoStatic 34 + )] 35 + #[serde(rename_all = "camelCase")] 36 + pub struct GetArtistOutput<'a> { 37 + #[serde(flatten)] 38 + #[serde(borrow)] 39 + pub value: crate::app_rocksky::artist::ArtistViewDetailed<'a>, 40 + } 41 + 42 + ///Response type for 43 + ///app.rocksky.artist.getArtist 44 + pub struct GetArtistResponse; 45 + impl jacquard_common::xrpc::XrpcResp for GetArtistResponse { 46 + const NSID: &'static str = "app.rocksky.artist.getArtist"; 47 + const ENCODING: &'static str = "application/json"; 48 + type Output<'de> = GetArtistOutput<'de>; 49 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 50 + } 51 + 52 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetArtist<'a> { 53 + const NSID: &'static str = "app.rocksky.artist.getArtist"; 54 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 55 + type Response = GetArtistResponse; 56 + } 57 + 58 + ///Endpoint type for 59 + ///app.rocksky.artist.getArtist 60 + pub struct GetArtistRequest; 61 + impl jacquard_common::xrpc::XrpcEndpoint for GetArtistRequest { 62 + const PATH: &'static str = "/xrpc/app.rocksky.artist.getArtist"; 63 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 64 + type Request<'de> = GetArtist<'de>; 65 + type Response = GetArtistResponse; 66 + }
+67
crates/jacquard-api/src/app_rocksky/artist/get_artist_albums.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.artist.getArtistAlbums 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetArtistAlbums<'a> { 21 + #[serde(borrow)] 22 + pub uri: jacquard_common::types::string::AtUri<'a>, 23 + } 24 + 25 + #[jacquard_derive::lexicon] 26 + #[derive( 27 + serde::Serialize, 28 + serde::Deserialize, 29 + Debug, 30 + Clone, 31 + PartialEq, 32 + Eq, 33 + jacquard_derive::IntoStatic, 34 + Default 35 + )] 36 + #[serde(rename_all = "camelCase")] 37 + pub struct GetArtistAlbumsOutput<'a> { 38 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 39 + #[serde(borrow)] 40 + pub albums: std::option::Option<Vec<crate::app_rocksky::album::AlbumViewBasic<'a>>>, 41 + } 42 + 43 + ///Response type for 44 + ///app.rocksky.artist.getArtistAlbums 45 + pub struct GetArtistAlbumsResponse; 46 + impl jacquard_common::xrpc::XrpcResp for GetArtistAlbumsResponse { 47 + const NSID: &'static str = "app.rocksky.artist.getArtistAlbums"; 48 + const ENCODING: &'static str = "application/json"; 49 + type Output<'de> = GetArtistAlbumsOutput<'de>; 50 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 51 + } 52 + 53 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetArtistAlbums<'a> { 54 + const NSID: &'static str = "app.rocksky.artist.getArtistAlbums"; 55 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 56 + type Response = GetArtistAlbumsResponse; 57 + } 58 + 59 + ///Endpoint type for 60 + ///app.rocksky.artist.getArtistAlbums 61 + pub struct GetArtistAlbumsRequest; 62 + impl jacquard_common::xrpc::XrpcEndpoint for GetArtistAlbumsRequest { 63 + const PATH: &'static str = "/xrpc/app.rocksky.artist.getArtistAlbums"; 64 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 65 + type Request<'de> = GetArtistAlbums<'de>; 66 + type Response = GetArtistAlbumsResponse; 67 + }
+74
crates/jacquard-api/src/app_rocksky/artist/get_artist_tracks.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.artist.getArtistTracks 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetArtistTracks<'a> { 21 + ///(min: 1) 22 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 23 + pub limit: std::option::Option<i64>, 24 + ///(min: 0) 25 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 26 + pub offset: std::option::Option<i64>, 27 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 28 + #[serde(borrow)] 29 + pub uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 30 + } 31 + 32 + #[jacquard_derive::lexicon] 33 + #[derive( 34 + serde::Serialize, 35 + serde::Deserialize, 36 + Debug, 37 + Clone, 38 + PartialEq, 39 + Eq, 40 + jacquard_derive::IntoStatic, 41 + Default 42 + )] 43 + #[serde(rename_all = "camelCase")] 44 + pub struct GetArtistTracksOutput<'a> { 45 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 46 + #[serde(borrow)] 47 + pub tracks: std::option::Option<Vec<crate::app_rocksky::song::SongViewBasic<'a>>>, 48 + } 49 + 50 + ///Response type for 51 + ///app.rocksky.artist.getArtistTracks 52 + pub struct GetArtistTracksResponse; 53 + impl jacquard_common::xrpc::XrpcResp for GetArtistTracksResponse { 54 + const NSID: &'static str = "app.rocksky.artist.getArtistTracks"; 55 + const ENCODING: &'static str = "application/json"; 56 + type Output<'de> = GetArtistTracksOutput<'de>; 57 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 58 + } 59 + 60 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetArtistTracks<'a> { 61 + const NSID: &'static str = "app.rocksky.artist.getArtistTracks"; 62 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 63 + type Response = GetArtistTracksResponse; 64 + } 65 + 66 + ///Endpoint type for 67 + ///app.rocksky.artist.getArtistTracks 68 + pub struct GetArtistTracksRequest; 69 + impl jacquard_common::xrpc::XrpcEndpoint for GetArtistTracksRequest { 70 + const PATH: &'static str = "/xrpc/app.rocksky.artist.getArtistTracks"; 71 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 72 + type Request<'de> = GetArtistTracks<'de>; 73 + type Response = GetArtistTracksResponse; 74 + }
+73
crates/jacquard-api/src/app_rocksky/artist/get_artists.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.artist.getArtists 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetArtists { 21 + ///(min: 1) 22 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 23 + pub limit: std::option::Option<i64>, 24 + ///(min: 0) 25 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 26 + pub offset: std::option::Option<i64>, 27 + } 28 + 29 + #[jacquard_derive::lexicon] 30 + #[derive( 31 + serde::Serialize, 32 + serde::Deserialize, 33 + Debug, 34 + Clone, 35 + PartialEq, 36 + Eq, 37 + jacquard_derive::IntoStatic, 38 + Default 39 + )] 40 + #[serde(rename_all = "camelCase")] 41 + pub struct GetArtistsOutput<'a> { 42 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 43 + #[serde(borrow)] 44 + pub artists: std::option::Option< 45 + Vec<crate::app_rocksky::artist::ArtistViewBasic<'a>>, 46 + >, 47 + } 48 + 49 + ///Response type for 50 + ///app.rocksky.artist.getArtists 51 + pub struct GetArtistsResponse; 52 + impl jacquard_common::xrpc::XrpcResp for GetArtistsResponse { 53 + const NSID: &'static str = "app.rocksky.artist.getArtists"; 54 + const ENCODING: &'static str = "application/json"; 55 + type Output<'de> = GetArtistsOutput<'de>; 56 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 57 + } 58 + 59 + impl jacquard_common::xrpc::XrpcRequest for GetArtists { 60 + const NSID: &'static str = "app.rocksky.artist.getArtists"; 61 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 62 + type Response = GetArtistsResponse; 63 + } 64 + 65 + ///Endpoint type for 66 + ///app.rocksky.artist.getArtists 67 + pub struct GetArtistsRequest; 68 + impl jacquard_common::xrpc::XrpcEndpoint for GetArtistsRequest { 69 + const PATH: &'static str = "/xrpc/app.rocksky.artist.getArtists"; 70 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 71 + type Request<'de> = GetArtists; 72 + type Response = GetArtistsResponse; 73 + }
+185
crates/jacquard-api/src/app_rocksky/artist.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.artist.defs 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + pub mod get_artist; 9 + pub mod get_artist_albums; 10 + pub mod get_artist_tracks; 11 + pub mod get_artists; 12 + 13 + /// A declaration of an artist. 14 + #[jacquard_derive::lexicon] 15 + #[derive( 16 + serde::Serialize, 17 + serde::Deserialize, 18 + Debug, 19 + Clone, 20 + PartialEq, 21 + Eq, 22 + jacquard_derive::IntoStatic, 23 + bon::Builder 24 + )] 25 + #[serde(rename_all = "camelCase")] 26 + pub struct Artist<'a> { 27 + /// The biography of the artist. 28 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 29 + #[builder(into)] 30 + #[serde(borrow)] 31 + pub bio: Option<jacquard_common::CowStr<'a>>, 32 + /// The birth date of the artist. 33 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 34 + #[builder(into)] 35 + pub born: Option<jacquard_common::types::string::Datetime>, 36 + /// The birth place of the artist. 37 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 38 + #[builder(into)] 39 + #[serde(borrow)] 40 + pub born_in: Option<jacquard_common::CowStr<'a>>, 41 + /// The date when the artist was created. 42 + pub created_at: jacquard_common::types::string::Datetime, 43 + /// The death date of the artist. 44 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 45 + #[builder(into)] 46 + pub died: Option<jacquard_common::types::string::Datetime>, 47 + /// The name of the artist. 48 + #[serde(borrow)] 49 + #[builder(into)] 50 + pub name: jacquard_common::CowStr<'a>, 51 + /// The picture of the artist. 52 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 53 + #[builder(into)] 54 + #[serde(borrow)] 55 + pub picture: Option<jacquard_common::types::blob::Blob<'a>>, 56 + /// The tags of the artist. 57 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 58 + #[builder(into)] 59 + #[serde(borrow)] 60 + pub tags: Option<Vec<jacquard_common::CowStr<'a>>>, 61 + } 62 + 63 + /// Typed wrapper for GetRecord response with this collection's record type. 64 + #[derive( 65 + serde::Serialize, 66 + serde::Deserialize, 67 + Debug, 68 + Clone, 69 + PartialEq, 70 + Eq, 71 + jacquard_derive::IntoStatic 72 + )] 73 + #[serde(rename_all = "camelCase")] 74 + pub struct ArtistGetRecordOutput<'a> { 75 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 76 + #[serde(borrow)] 77 + pub cid: std::option::Option<jacquard_common::types::string::Cid<'a>>, 78 + #[serde(borrow)] 79 + pub uri: jacquard_common::types::string::AtUri<'a>, 80 + #[serde(borrow)] 81 + pub value: Artist<'a>, 82 + } 83 + 84 + /// Marker type for deserializing records from this collection. 85 + pub struct ArtistRecord; 86 + impl jacquard_common::xrpc::XrpcResp for ArtistRecord { 87 + const NSID: &'static str = "app.rocksky.artist"; 88 + const ENCODING: &'static str = "application/json"; 89 + type Output<'de> = ArtistGetRecordOutput<'de>; 90 + type Err<'de> = jacquard_common::types::collection::RecordError<'de>; 91 + } 92 + 93 + impl jacquard_common::types::collection::Collection for Artist<'_> { 94 + const NSID: &'static str = "app.rocksky.artist"; 95 + type Record = ArtistRecord; 96 + } 97 + 98 + impl From<ArtistGetRecordOutput<'_>> for Artist<'_> { 99 + fn from(output: ArtistGetRecordOutput<'_>) -> Self { 100 + use jacquard_common::IntoStatic; 101 + output.value.into_static() 102 + } 103 + } 104 + 105 + #[jacquard_derive::lexicon] 106 + #[derive( 107 + serde::Serialize, 108 + serde::Deserialize, 109 + Debug, 110 + Clone, 111 + PartialEq, 112 + Eq, 113 + jacquard_derive::IntoStatic, 114 + Default 115 + )] 116 + #[serde(rename_all = "camelCase")] 117 + pub struct ArtistViewBasic<'a> { 118 + /// The unique identifier of the artist. 119 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 120 + #[serde(borrow)] 121 + pub id: std::option::Option<jacquard_common::CowStr<'a>>, 122 + /// The name of the artist. 123 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 124 + #[serde(borrow)] 125 + pub name: std::option::Option<jacquard_common::CowStr<'a>>, 126 + /// The picture of the artist. 127 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 128 + #[serde(borrow)] 129 + pub picture: std::option::Option<jacquard_common::CowStr<'a>>, 130 + /// The number of times the artist has been played. 131 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 132 + pub play_count: std::option::Option<i64>, 133 + /// The SHA256 hash of the artist. 134 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 135 + #[serde(borrow)] 136 + pub sha256: std::option::Option<jacquard_common::CowStr<'a>>, 137 + /// The number of unique listeners who have played the artist. 138 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 139 + pub unique_listeners: std::option::Option<i64>, 140 + /// The URI of the artist. 141 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 142 + #[serde(borrow)] 143 + pub uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 144 + } 145 + 146 + #[jacquard_derive::lexicon] 147 + #[derive( 148 + serde::Serialize, 149 + serde::Deserialize, 150 + Debug, 151 + Clone, 152 + PartialEq, 153 + Eq, 154 + jacquard_derive::IntoStatic, 155 + Default 156 + )] 157 + #[serde(rename_all = "camelCase")] 158 + pub struct ArtistViewDetailed<'a> { 159 + /// The unique identifier of the artist. 160 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 161 + #[serde(borrow)] 162 + pub id: std::option::Option<jacquard_common::CowStr<'a>>, 163 + /// The name of the artist. 164 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 165 + #[serde(borrow)] 166 + pub name: std::option::Option<jacquard_common::CowStr<'a>>, 167 + /// The picture of the artist. 168 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 169 + #[serde(borrow)] 170 + pub picture: std::option::Option<jacquard_common::CowStr<'a>>, 171 + /// The number of times the artist has been played. 172 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 173 + pub play_count: std::option::Option<i64>, 174 + /// The SHA256 hash of the artist. 175 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 176 + #[serde(borrow)] 177 + pub sha256: std::option::Option<jacquard_common::CowStr<'a>>, 178 + /// The number of unique listeners who have played the artist. 179 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 180 + pub unique_listeners: std::option::Option<i64>, 181 + /// The URI of the artist. 182 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 183 + #[serde(borrow)] 184 + pub uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 185 + }
+76
crates/jacquard-api/src/app_rocksky/charts/get_scrobbles_chart.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.charts.getScrobblesChart 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetScrobblesChart<'a> { 21 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 22 + #[serde(borrow)] 23 + pub albumuri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 24 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 25 + #[serde(borrow)] 26 + pub artisturi: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 27 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 28 + #[serde(borrow)] 29 + pub did: std::option::Option<jacquard_common::types::ident::AtIdentifier<'a>>, 30 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 31 + #[serde(borrow)] 32 + pub songuri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 33 + } 34 + 35 + #[jacquard_derive::lexicon] 36 + #[derive( 37 + serde::Serialize, 38 + serde::Deserialize, 39 + Debug, 40 + Clone, 41 + PartialEq, 42 + Eq, 43 + jacquard_derive::IntoStatic 44 + )] 45 + #[serde(rename_all = "camelCase")] 46 + pub struct GetScrobblesChartOutput<'a> { 47 + #[serde(flatten)] 48 + #[serde(borrow)] 49 + pub value: crate::app_rocksky::charts::ChartsView<'a>, 50 + } 51 + 52 + ///Response type for 53 + ///app.rocksky.charts.getScrobblesChart 54 + pub struct GetScrobblesChartResponse; 55 + impl jacquard_common::xrpc::XrpcResp for GetScrobblesChartResponse { 56 + const NSID: &'static str = "app.rocksky.charts.getScrobblesChart"; 57 + const ENCODING: &'static str = "application/json"; 58 + type Output<'de> = GetScrobblesChartOutput<'de>; 59 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 60 + } 61 + 62 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetScrobblesChart<'a> { 63 + const NSID: &'static str = "app.rocksky.charts.getScrobblesChart"; 64 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 65 + type Response = GetScrobblesChartResponse; 66 + } 67 + 68 + ///Endpoint type for 69 + ///app.rocksky.charts.getScrobblesChart 70 + pub struct GetScrobblesChartRequest; 71 + impl jacquard_common::xrpc::XrpcEndpoint for GetScrobblesChartRequest { 72 + const PATH: &'static str = "/xrpc/app.rocksky.charts.getScrobblesChart"; 73 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 74 + type Request<'de> = GetScrobblesChart<'de>; 75 + type Response = GetScrobblesChartResponse; 76 + }
+49
crates/jacquard-api/src/app_rocksky/charts.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.charts.defs 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + pub mod get_scrobbles_chart; 9 + 10 + #[jacquard_derive::lexicon] 11 + #[derive( 12 + serde::Serialize, 13 + serde::Deserialize, 14 + Debug, 15 + Clone, 16 + PartialEq, 17 + Eq, 18 + jacquard_derive::IntoStatic, 19 + Default 20 + )] 21 + #[serde(rename_all = "camelCase")] 22 + pub struct ChartsView<'a> { 23 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 24 + #[serde(borrow)] 25 + pub scrobbles: std::option::Option< 26 + Vec<crate::app_rocksky::charts::ScrobbleViewBasic<'a>>, 27 + >, 28 + } 29 + 30 + #[jacquard_derive::lexicon] 31 + #[derive( 32 + serde::Serialize, 33 + serde::Deserialize, 34 + Debug, 35 + Clone, 36 + PartialEq, 37 + Eq, 38 + jacquard_derive::IntoStatic, 39 + Default 40 + )] 41 + #[serde(rename_all = "camelCase")] 42 + pub struct ScrobbleViewBasic<'a> { 43 + /// The number of scrobbles on this date. 44 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 45 + pub count: std::option::Option<i64>, 46 + /// The date of the scrobble. 47 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 48 + pub date: std::option::Option<jacquard_common::types::string::Datetime>, 49 + }
+62
crates/jacquard-api/src/app_rocksky/dropbox/download_file.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.dropbox.downloadFile 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct DownloadFile<'a> { 21 + #[serde(borrow)] 22 + #[builder(into)] 23 + pub file_id: jacquard_common::CowStr<'a>, 24 + } 25 + 26 + #[jacquard_derive::lexicon] 27 + #[derive( 28 + serde::Serialize, 29 + serde::Deserialize, 30 + Debug, 31 + Clone, 32 + PartialEq, 33 + Eq, 34 + jacquard_derive::IntoStatic 35 + )] 36 + #[serde(rename_all = "camelCase")] 37 + pub struct DownloadFileOutput<'a> {} 38 + ///Response type for 39 + ///app.rocksky.dropbox.downloadFile 40 + pub struct DownloadFileResponse; 41 + impl jacquard_common::xrpc::XrpcResp for DownloadFileResponse { 42 + const NSID: &'static str = "app.rocksky.dropbox.downloadFile"; 43 + const ENCODING: &'static str = "application/octet-stream"; 44 + type Output<'de> = DownloadFileOutput<'de>; 45 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 46 + } 47 + 48 + impl<'a> jacquard_common::xrpc::XrpcRequest for DownloadFile<'a> { 49 + const NSID: &'static str = "app.rocksky.dropbox.downloadFile"; 50 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 51 + type Response = DownloadFileResponse; 52 + } 53 + 54 + ///Endpoint type for 55 + ///app.rocksky.dropbox.downloadFile 56 + pub struct DownloadFileRequest; 57 + impl jacquard_common::xrpc::XrpcEndpoint for DownloadFileRequest { 58 + const PATH: &'static str = "/xrpc/app.rocksky.dropbox.downloadFile"; 59 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 60 + type Request<'de> = DownloadFile<'de>; 61 + type Response = DownloadFileResponse; 62 + }
+68
crates/jacquard-api/src/app_rocksky/dropbox/get_files.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.dropbox.getFiles 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetFiles<'a> { 21 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 22 + #[serde(borrow)] 23 + #[builder(into)] 24 + pub at: std::option::Option<jacquard_common::CowStr<'a>>, 25 + } 26 + 27 + #[jacquard_derive::lexicon] 28 + #[derive( 29 + serde::Serialize, 30 + serde::Deserialize, 31 + Debug, 32 + Clone, 33 + PartialEq, 34 + Eq, 35 + jacquard_derive::IntoStatic 36 + )] 37 + #[serde(rename_all = "camelCase")] 38 + pub struct GetFilesOutput<'a> { 39 + #[serde(flatten)] 40 + #[serde(borrow)] 41 + pub value: crate::app_rocksky::dropbox::FileListView<'a>, 42 + } 43 + 44 + ///Response type for 45 + ///app.rocksky.dropbox.getFiles 46 + pub struct GetFilesResponse; 47 + impl jacquard_common::xrpc::XrpcResp for GetFilesResponse { 48 + const NSID: &'static str = "app.rocksky.dropbox.getFiles"; 49 + const ENCODING: &'static str = "application/json"; 50 + type Output<'de> = GetFilesOutput<'de>; 51 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 52 + } 53 + 54 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetFiles<'a> { 55 + const NSID: &'static str = "app.rocksky.dropbox.getFiles"; 56 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 57 + type Response = GetFilesResponse; 58 + } 59 + 60 + ///Endpoint type for 61 + ///app.rocksky.dropbox.getFiles 62 + pub struct GetFilesRequest; 63 + impl jacquard_common::xrpc::XrpcEndpoint for GetFilesRequest { 64 + const PATH: &'static str = "/xrpc/app.rocksky.dropbox.getFiles"; 65 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 66 + type Request<'de> = GetFiles<'de>; 67 + type Response = GetFilesResponse; 68 + }
+67
crates/jacquard-api/src/app_rocksky/dropbox/get_metadata.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.dropbox.getMetadata 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetMetadata<'a> { 21 + #[serde(borrow)] 22 + #[builder(into)] 23 + pub path: jacquard_common::CowStr<'a>, 24 + } 25 + 26 + #[jacquard_derive::lexicon] 27 + #[derive( 28 + serde::Serialize, 29 + serde::Deserialize, 30 + Debug, 31 + Clone, 32 + PartialEq, 33 + Eq, 34 + jacquard_derive::IntoStatic 35 + )] 36 + #[serde(rename_all = "camelCase")] 37 + pub struct GetMetadataOutput<'a> { 38 + #[serde(flatten)] 39 + #[serde(borrow)] 40 + pub value: crate::app_rocksky::dropbox::FileView<'a>, 41 + } 42 + 43 + ///Response type for 44 + ///app.rocksky.dropbox.getMetadata 45 + pub struct GetMetadataResponse; 46 + impl jacquard_common::xrpc::XrpcResp for GetMetadataResponse { 47 + const NSID: &'static str = "app.rocksky.dropbox.getMetadata"; 48 + const ENCODING: &'static str = "application/json"; 49 + type Output<'de> = GetMetadataOutput<'de>; 50 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 51 + } 52 + 53 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetMetadata<'a> { 54 + const NSID: &'static str = "app.rocksky.dropbox.getMetadata"; 55 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 56 + type Response = GetMetadataResponse; 57 + } 58 + 59 + ///Endpoint type for 60 + ///app.rocksky.dropbox.getMetadata 61 + pub struct GetMetadataRequest; 62 + impl jacquard_common::xrpc::XrpcEndpoint for GetMetadataRequest { 63 + const PATH: &'static str = "/xrpc/app.rocksky.dropbox.getMetadata"; 64 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 65 + type Request<'de> = GetMetadata<'de>; 66 + type Response = GetMetadataResponse; 67 + }
+67
crates/jacquard-api/src/app_rocksky/dropbox/get_temporary_link.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.dropbox.getTemporaryLink 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetTemporaryLink<'a> { 21 + #[serde(borrow)] 22 + #[builder(into)] 23 + pub path: jacquard_common::CowStr<'a>, 24 + } 25 + 26 + #[jacquard_derive::lexicon] 27 + #[derive( 28 + serde::Serialize, 29 + serde::Deserialize, 30 + Debug, 31 + Clone, 32 + PartialEq, 33 + Eq, 34 + jacquard_derive::IntoStatic 35 + )] 36 + #[serde(rename_all = "camelCase")] 37 + pub struct GetTemporaryLinkOutput<'a> { 38 + #[serde(flatten)] 39 + #[serde(borrow)] 40 + pub value: crate::app_rocksky::dropbox::TemporaryLinkView<'a>, 41 + } 42 + 43 + ///Response type for 44 + ///app.rocksky.dropbox.getTemporaryLink 45 + pub struct GetTemporaryLinkResponse; 46 + impl jacquard_common::xrpc::XrpcResp for GetTemporaryLinkResponse { 47 + const NSID: &'static str = "app.rocksky.dropbox.getTemporaryLink"; 48 + const ENCODING: &'static str = "application/json"; 49 + type Output<'de> = GetTemporaryLinkOutput<'de>; 50 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 51 + } 52 + 53 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetTemporaryLink<'a> { 54 + const NSID: &'static str = "app.rocksky.dropbox.getTemporaryLink"; 55 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 56 + type Response = GetTemporaryLinkResponse; 57 + } 58 + 59 + ///Endpoint type for 60 + ///app.rocksky.dropbox.getTemporaryLink 61 + pub struct GetTemporaryLinkRequest; 62 + impl jacquard_common::xrpc::XrpcEndpoint for GetTemporaryLinkRequest { 63 + const PATH: &'static str = "/xrpc/app.rocksky.dropbox.getTemporaryLink"; 64 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 65 + type Request<'de> = GetTemporaryLink<'de>; 66 + type Response = GetTemporaryLinkResponse; 67 + }
+86
crates/jacquard-api/src/app_rocksky/dropbox.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.dropbox.defs 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + pub mod download_file; 9 + pub mod get_files; 10 + pub mod get_metadata; 11 + pub mod get_temporary_link; 12 + 13 + #[jacquard_derive::lexicon] 14 + #[derive( 15 + serde::Serialize, 16 + serde::Deserialize, 17 + Debug, 18 + Clone, 19 + PartialEq, 20 + Eq, 21 + jacquard_derive::IntoStatic, 22 + Default 23 + )] 24 + #[serde(rename_all = "camelCase")] 25 + pub struct FileListView<'a> { 26 + /// A list of files in the Dropbox. 27 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 28 + #[serde(borrow)] 29 + pub files: std::option::Option<Vec<crate::app_rocksky::dropbox::FileView<'a>>>, 30 + } 31 + 32 + #[jacquard_derive::lexicon] 33 + #[derive( 34 + serde::Serialize, 35 + serde::Deserialize, 36 + Debug, 37 + Clone, 38 + PartialEq, 39 + Eq, 40 + jacquard_derive::IntoStatic, 41 + Default 42 + )] 43 + #[serde(rename_all = "camelCase")] 44 + pub struct FileView<'a> { 45 + /// The last modified date and time of the file on the client. 46 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 47 + pub client_modified: std::option::Option<jacquard_common::types::string::Datetime>, 48 + /// The unique identifier of the file. 49 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 50 + #[serde(borrow)] 51 + pub id: std::option::Option<jacquard_common::CowStr<'a>>, 52 + /// The name of the file. 53 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 54 + #[serde(borrow)] 55 + pub name: std::option::Option<jacquard_common::CowStr<'a>>, 56 + /// The display path of the file. 57 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 58 + #[serde(borrow)] 59 + pub path_display: std::option::Option<jacquard_common::CowStr<'a>>, 60 + /// The lowercased path of the file. 61 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 62 + #[serde(borrow)] 63 + pub path_lower: std::option::Option<jacquard_common::CowStr<'a>>, 64 + /// The last modified date and time of the file on the server. 65 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 66 + pub server_modified: std::option::Option<jacquard_common::types::string::Datetime>, 67 + } 68 + 69 + #[jacquard_derive::lexicon] 70 + #[derive( 71 + serde::Serialize, 72 + serde::Deserialize, 73 + Debug, 74 + Clone, 75 + PartialEq, 76 + Eq, 77 + jacquard_derive::IntoStatic, 78 + Default 79 + )] 80 + #[serde(rename_all = "camelCase")] 81 + pub struct TemporaryLinkView<'a> { 82 + /// The temporary link to access the file. 83 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 84 + #[serde(borrow)] 85 + pub link: std::option::Option<jacquard_common::types::string::Uri<'a>>, 86 + }
+67
crates/jacquard-api/src/app_rocksky/feed/get_now_playings.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.feed.getNowPlayings 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetNowPlayings { 21 + ///(min: 1) 22 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 23 + pub size: std::option::Option<i64>, 24 + } 25 + 26 + #[jacquard_derive::lexicon] 27 + #[derive( 28 + serde::Serialize, 29 + serde::Deserialize, 30 + Debug, 31 + Clone, 32 + PartialEq, 33 + Eq, 34 + jacquard_derive::IntoStatic 35 + )] 36 + #[serde(rename_all = "camelCase")] 37 + pub struct GetNowPlayingsOutput<'a> { 38 + #[serde(flatten)] 39 + #[serde(borrow)] 40 + pub value: crate::app_rocksky::feed::NowPlayingsView<'a>, 41 + } 42 + 43 + ///Response type for 44 + ///app.rocksky.feed.getNowPlayings 45 + pub struct GetNowPlayingsResponse; 46 + impl jacquard_common::xrpc::XrpcResp for GetNowPlayingsResponse { 47 + const NSID: &'static str = "app.rocksky.feed.getNowPlayings"; 48 + const ENCODING: &'static str = "application/json"; 49 + type Output<'de> = GetNowPlayingsOutput<'de>; 50 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 51 + } 52 + 53 + impl jacquard_common::xrpc::XrpcRequest for GetNowPlayings { 54 + const NSID: &'static str = "app.rocksky.feed.getNowPlayings"; 55 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 56 + type Response = GetNowPlayingsResponse; 57 + } 58 + 59 + ///Endpoint type for 60 + ///app.rocksky.feed.getNowPlayings 61 + pub struct GetNowPlayingsRequest; 62 + impl jacquard_common::xrpc::XrpcEndpoint for GetNowPlayingsRequest { 63 + const PATH: &'static str = "/xrpc/app.rocksky.feed.getNowPlayings"; 64 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 65 + type Request<'de> = GetNowPlayings; 66 + type Response = GetNowPlayingsResponse; 67 + }
+67
crates/jacquard-api/src/app_rocksky/feed/search.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.feed.search 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct Search<'a> { 21 + #[serde(borrow)] 22 + #[builder(into)] 23 + pub query: jacquard_common::CowStr<'a>, 24 + } 25 + 26 + #[jacquard_derive::lexicon] 27 + #[derive( 28 + serde::Serialize, 29 + serde::Deserialize, 30 + Debug, 31 + Clone, 32 + PartialEq, 33 + Eq, 34 + jacquard_derive::IntoStatic 35 + )] 36 + #[serde(rename_all = "camelCase")] 37 + pub struct SearchOutput<'a> { 38 + #[serde(flatten)] 39 + #[serde(borrow)] 40 + pub value: crate::app_rocksky::feed::SearchResultsView<'a>, 41 + } 42 + 43 + ///Response type for 44 + ///app.rocksky.feed.search 45 + pub struct SearchResponse; 46 + impl jacquard_common::xrpc::XrpcResp for SearchResponse { 47 + const NSID: &'static str = "app.rocksky.feed.search"; 48 + const ENCODING: &'static str = "application/json"; 49 + type Output<'de> = SearchOutput<'de>; 50 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 51 + } 52 + 53 + impl<'a> jacquard_common::xrpc::XrpcRequest for Search<'a> { 54 + const NSID: &'static str = "app.rocksky.feed.search"; 55 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 56 + type Response = SearchResponse; 57 + } 58 + 59 + ///Endpoint type for 60 + ///app.rocksky.feed.search 61 + pub struct SearchRequest; 62 + impl jacquard_common::xrpc::XrpcEndpoint for SearchRequest { 63 + const PATH: &'static str = "/xrpc/app.rocksky.feed.search"; 64 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 65 + type Request<'de> = Search<'de>; 66 + type Response = SearchResponse; 67 + }
+140
crates/jacquard-api/src/app_rocksky/feed.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.feed.defs 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + pub mod get_now_playings; 9 + pub mod search; 10 + 11 + #[jacquard_derive::lexicon] 12 + #[derive( 13 + serde::Serialize, 14 + serde::Deserialize, 15 + Debug, 16 + Clone, 17 + PartialEq, 18 + Eq, 19 + jacquard_derive::IntoStatic, 20 + Default 21 + )] 22 + #[serde(rename_all = "camelCase")] 23 + pub struct NowPlayingView<'a> { 24 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 25 + #[serde(borrow)] 26 + pub album: std::option::Option<jacquard_common::CowStr<'a>>, 27 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 28 + #[serde(borrow)] 29 + pub album_art: std::option::Option<jacquard_common::types::string::Uri<'a>>, 30 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 31 + #[serde(borrow)] 32 + pub album_artist: std::option::Option<jacquard_common::CowStr<'a>>, 33 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 34 + #[serde(borrow)] 35 + pub album_uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 36 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 37 + #[serde(borrow)] 38 + pub artist: std::option::Option<jacquard_common::CowStr<'a>>, 39 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 40 + #[serde(borrow)] 41 + pub artist_uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 42 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 43 + #[serde(borrow)] 44 + pub avatar: std::option::Option<jacquard_common::types::string::Uri<'a>>, 45 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 46 + #[serde(borrow)] 47 + pub created_at: std::option::Option<jacquard_common::CowStr<'a>>, 48 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 49 + #[serde(borrow)] 50 + pub did: std::option::Option<jacquard_common::types::ident::AtIdentifier<'a>>, 51 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 52 + #[serde(borrow)] 53 + pub handle: std::option::Option<jacquard_common::CowStr<'a>>, 54 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 55 + #[serde(borrow)] 56 + pub id: std::option::Option<jacquard_common::CowStr<'a>>, 57 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 58 + #[serde(borrow)] 59 + pub title: std::option::Option<jacquard_common::CowStr<'a>>, 60 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 61 + #[serde(borrow)] 62 + pub track_id: std::option::Option<jacquard_common::CowStr<'a>>, 63 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 64 + #[serde(borrow)] 65 + pub track_uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 66 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 67 + #[serde(borrow)] 68 + pub uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 69 + } 70 + 71 + #[jacquard_derive::lexicon] 72 + #[derive( 73 + serde::Serialize, 74 + serde::Deserialize, 75 + Debug, 76 + Clone, 77 + PartialEq, 78 + Eq, 79 + jacquard_derive::IntoStatic, 80 + Default 81 + )] 82 + #[serde(rename_all = "camelCase")] 83 + pub struct NowPlayingsView<'a> { 84 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 85 + #[serde(borrow)] 86 + pub now_playings: std::option::Option< 87 + Vec<crate::app_rocksky::feed::NowPlayingView<'a>>, 88 + >, 89 + } 90 + 91 + #[jacquard_derive::lexicon] 92 + #[derive( 93 + serde::Serialize, 94 + serde::Deserialize, 95 + Debug, 96 + Clone, 97 + PartialEq, 98 + Eq, 99 + jacquard_derive::IntoStatic, 100 + Default 101 + )] 102 + #[serde(rename_all = "camelCase")] 103 + pub struct SearchResultsView<'a> { 104 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 105 + pub estimated_total_hits: std::option::Option<i64>, 106 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 107 + #[serde(borrow)] 108 + pub hits: std::option::Option<Vec<SearchResultsViewHitsItem<'a>>>, 109 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 110 + pub limit: std::option::Option<i64>, 111 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 112 + pub offset: std::option::Option<i64>, 113 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 114 + pub processing_time_ms: std::option::Option<i64>, 115 + } 116 + 117 + #[jacquard_derive::open_union] 118 + #[derive( 119 + serde::Serialize, 120 + serde::Deserialize, 121 + Debug, 122 + Clone, 123 + PartialEq, 124 + Eq, 125 + jacquard_derive::IntoStatic 126 + )] 127 + #[serde(tag = "$type")] 128 + #[serde(bound(deserialize = "'de: 'a"))] 129 + pub enum SearchResultsViewHitsItem<'a> { 130 + #[serde(rename = "app.rocksky.song.defs#songViewBasic")] 131 + SongViewBasic(Box<crate::app_rocksky::song::SongViewBasic<'a>>), 132 + #[serde(rename = "app.rocksky.album.defs#albumViewBasic")] 133 + AlbumViewBasic(Box<crate::app_rocksky::album::AlbumViewBasic<'a>>), 134 + #[serde(rename = "app.rocksky.artist.defs#artistViewBasic")] 135 + ArtistViewBasic(Box<crate::app_rocksky::artist::ArtistViewBasic<'a>>), 136 + #[serde(rename = "app.rocksky.playlist.defs#playlistViewBasic")] 137 + PlaylistViewBasic(Box<crate::app_rocksky::playlist::PlaylistViewBasic<'a>>), 138 + #[serde(rename = "app.rocksky.actor.defs#profileViewBasic")] 139 + ProfileViewBasic(Box<crate::app_rocksky::actor::ProfileViewBasic<'a>>), 140 + }
+62
crates/jacquard-api/src/app_rocksky/googledrive/download_file.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.googledrive.downloadFile 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct DownloadFile<'a> { 21 + #[serde(borrow)] 22 + #[builder(into)] 23 + pub file_id: jacquard_common::CowStr<'a>, 24 + } 25 + 26 + #[jacquard_derive::lexicon] 27 + #[derive( 28 + serde::Serialize, 29 + serde::Deserialize, 30 + Debug, 31 + Clone, 32 + PartialEq, 33 + Eq, 34 + jacquard_derive::IntoStatic 35 + )] 36 + #[serde(rename_all = "camelCase")] 37 + pub struct DownloadFileOutput<'a> {} 38 + ///Response type for 39 + ///app.rocksky.googledrive.downloadFile 40 + pub struct DownloadFileResponse; 41 + impl jacquard_common::xrpc::XrpcResp for DownloadFileResponse { 42 + const NSID: &'static str = "app.rocksky.googledrive.downloadFile"; 43 + const ENCODING: &'static str = "application/octet-stream"; 44 + type Output<'de> = DownloadFileOutput<'de>; 45 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 46 + } 47 + 48 + impl<'a> jacquard_common::xrpc::XrpcRequest for DownloadFile<'a> { 49 + const NSID: &'static str = "app.rocksky.googledrive.downloadFile"; 50 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 51 + type Response = DownloadFileResponse; 52 + } 53 + 54 + ///Endpoint type for 55 + ///app.rocksky.googledrive.downloadFile 56 + pub struct DownloadFileRequest; 57 + impl jacquard_common::xrpc::XrpcEndpoint for DownloadFileRequest { 58 + const PATH: &'static str = "/xrpc/app.rocksky.googledrive.downloadFile"; 59 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 60 + type Request<'de> = DownloadFile<'de>; 61 + type Response = DownloadFileResponse; 62 + }
+67
crates/jacquard-api/src/app_rocksky/googledrive/get_file.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.googledrive.getFile 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetFile<'a> { 21 + #[serde(borrow)] 22 + #[builder(into)] 23 + pub file_id: jacquard_common::CowStr<'a>, 24 + } 25 + 26 + #[jacquard_derive::lexicon] 27 + #[derive( 28 + serde::Serialize, 29 + serde::Deserialize, 30 + Debug, 31 + Clone, 32 + PartialEq, 33 + Eq, 34 + jacquard_derive::IntoStatic 35 + )] 36 + #[serde(rename_all = "camelCase")] 37 + pub struct GetFileOutput<'a> { 38 + #[serde(flatten)] 39 + #[serde(borrow)] 40 + pub value: crate::app_rocksky::googledrive::FileView<'a>, 41 + } 42 + 43 + ///Response type for 44 + ///app.rocksky.googledrive.getFile 45 + pub struct GetFileResponse; 46 + impl jacquard_common::xrpc::XrpcResp for GetFileResponse { 47 + const NSID: &'static str = "app.rocksky.googledrive.getFile"; 48 + const ENCODING: &'static str = "application/json"; 49 + type Output<'de> = GetFileOutput<'de>; 50 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 51 + } 52 + 53 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetFile<'a> { 54 + const NSID: &'static str = "app.rocksky.googledrive.getFile"; 55 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 56 + type Response = GetFileResponse; 57 + } 58 + 59 + ///Endpoint type for 60 + ///app.rocksky.googledrive.getFile 61 + pub struct GetFileRequest; 62 + impl jacquard_common::xrpc::XrpcEndpoint for GetFileRequest { 63 + const PATH: &'static str = "/xrpc/app.rocksky.googledrive.getFile"; 64 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 65 + type Request<'de> = GetFile<'de>; 66 + type Response = GetFileResponse; 67 + }
+68
crates/jacquard-api/src/app_rocksky/googledrive/get_files.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.googledrive.getFiles 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetFiles<'a> { 21 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 22 + #[serde(borrow)] 23 + #[builder(into)] 24 + pub at: std::option::Option<jacquard_common::CowStr<'a>>, 25 + } 26 + 27 + #[jacquard_derive::lexicon] 28 + #[derive( 29 + serde::Serialize, 30 + serde::Deserialize, 31 + Debug, 32 + Clone, 33 + PartialEq, 34 + Eq, 35 + jacquard_derive::IntoStatic 36 + )] 37 + #[serde(rename_all = "camelCase")] 38 + pub struct GetFilesOutput<'a> { 39 + #[serde(flatten)] 40 + #[serde(borrow)] 41 + pub value: crate::app_rocksky::googledrive::FileListView<'a>, 42 + } 43 + 44 + ///Response type for 45 + ///app.rocksky.googledrive.getFiles 46 + pub struct GetFilesResponse; 47 + impl jacquard_common::xrpc::XrpcResp for GetFilesResponse { 48 + const NSID: &'static str = "app.rocksky.googledrive.getFiles"; 49 + const ENCODING: &'static str = "application/json"; 50 + type Output<'de> = GetFilesOutput<'de>; 51 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 52 + } 53 + 54 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetFiles<'a> { 55 + const NSID: &'static str = "app.rocksky.googledrive.getFiles"; 56 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 57 + type Response = GetFilesResponse; 58 + } 59 + 60 + ///Endpoint type for 61 + ///app.rocksky.googledrive.getFiles 62 + pub struct GetFilesRequest; 63 + impl jacquard_common::xrpc::XrpcEndpoint for GetFilesRequest { 64 + const PATH: &'static str = "/xrpc/app.rocksky.googledrive.getFiles"; 65 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 66 + type Request<'de> = GetFiles<'de>; 67 + type Response = GetFilesResponse; 68 + }
+47
crates/jacquard-api/src/app_rocksky/googledrive.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.googledrive.defs 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + pub mod download_file; 9 + pub mod get_file; 10 + pub mod get_files; 11 + 12 + #[jacquard_derive::lexicon] 13 + #[derive( 14 + serde::Serialize, 15 + serde::Deserialize, 16 + Debug, 17 + Clone, 18 + PartialEq, 19 + Eq, 20 + jacquard_derive::IntoStatic, 21 + Default 22 + )] 23 + #[serde(rename_all = "camelCase")] 24 + pub struct FileListView<'a> { 25 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 26 + #[serde(borrow)] 27 + pub files: std::option::Option<Vec<crate::app_rocksky::googledrive::FileView<'a>>>, 28 + } 29 + 30 + #[jacquard_derive::lexicon] 31 + #[derive( 32 + serde::Serialize, 33 + serde::Deserialize, 34 + Debug, 35 + Clone, 36 + PartialEq, 37 + Eq, 38 + jacquard_derive::IntoStatic, 39 + Default 40 + )] 41 + #[serde(rename_all = "camelCase")] 42 + pub struct FileView<'a> { 43 + /// The unique identifier of the file. 44 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 45 + #[serde(borrow)] 46 + pub id: std::option::Option<jacquard_common::CowStr<'a>>, 47 + }
+72
crates/jacquard-api/src/app_rocksky/like/dislike_shout.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.like.dislikeShout 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[jacquard_derive::lexicon] 9 + #[derive( 10 + serde::Serialize, 11 + serde::Deserialize, 12 + Debug, 13 + Clone, 14 + PartialEq, 15 + Eq, 16 + jacquard_derive::IntoStatic, 17 + Default 18 + )] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct DislikeShout<'a> { 21 + /// The unique identifier of the shout to dislike 22 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 23 + #[serde(borrow)] 24 + pub uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 25 + } 26 + 27 + #[jacquard_derive::lexicon] 28 + #[derive( 29 + serde::Serialize, 30 + serde::Deserialize, 31 + Debug, 32 + Clone, 33 + PartialEq, 34 + Eq, 35 + jacquard_derive::IntoStatic 36 + )] 37 + #[serde(rename_all = "camelCase")] 38 + pub struct DislikeShoutOutput<'a> { 39 + #[serde(flatten)] 40 + #[serde(borrow)] 41 + pub value: crate::app_rocksky::shout::ShoutView<'a>, 42 + } 43 + 44 + ///Response type for 45 + ///app.rocksky.like.dislikeShout 46 + pub struct DislikeShoutResponse; 47 + impl jacquard_common::xrpc::XrpcResp for DislikeShoutResponse { 48 + const NSID: &'static str = "app.rocksky.like.dislikeShout"; 49 + const ENCODING: &'static str = "application/json"; 50 + type Output<'de> = DislikeShoutOutput<'de>; 51 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 52 + } 53 + 54 + impl<'a> jacquard_common::xrpc::XrpcRequest for DislikeShout<'a> { 55 + const NSID: &'static str = "app.rocksky.like.dislikeShout"; 56 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 57 + "application/json", 58 + ); 59 + type Response = DislikeShoutResponse; 60 + } 61 + 62 + ///Endpoint type for 63 + ///app.rocksky.like.dislikeShout 64 + pub struct DislikeShoutRequest; 65 + impl jacquard_common::xrpc::XrpcEndpoint for DislikeShoutRequest { 66 + const PATH: &'static str = "/xrpc/app.rocksky.like.dislikeShout"; 67 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 68 + "application/json", 69 + ); 70 + type Request<'de> = DislikeShout<'de>; 71 + type Response = DislikeShoutResponse; 72 + }
+72
crates/jacquard-api/src/app_rocksky/like/dislike_song.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.like.dislikeSong 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[jacquard_derive::lexicon] 9 + #[derive( 10 + serde::Serialize, 11 + serde::Deserialize, 12 + Debug, 13 + Clone, 14 + PartialEq, 15 + Eq, 16 + jacquard_derive::IntoStatic, 17 + Default 18 + )] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct DislikeSong<'a> { 21 + /// The unique identifier of the song to dislike 22 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 23 + #[serde(borrow)] 24 + pub uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 25 + } 26 + 27 + #[jacquard_derive::lexicon] 28 + #[derive( 29 + serde::Serialize, 30 + serde::Deserialize, 31 + Debug, 32 + Clone, 33 + PartialEq, 34 + Eq, 35 + jacquard_derive::IntoStatic 36 + )] 37 + #[serde(rename_all = "camelCase")] 38 + pub struct DislikeSongOutput<'a> { 39 + #[serde(flatten)] 40 + #[serde(borrow)] 41 + pub value: crate::app_rocksky::song::SongViewDetailed<'a>, 42 + } 43 + 44 + ///Response type for 45 + ///app.rocksky.like.dislikeSong 46 + pub struct DislikeSongResponse; 47 + impl jacquard_common::xrpc::XrpcResp for DislikeSongResponse { 48 + const NSID: &'static str = "app.rocksky.like.dislikeSong"; 49 + const ENCODING: &'static str = "application/json"; 50 + type Output<'de> = DislikeSongOutput<'de>; 51 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 52 + } 53 + 54 + impl<'a> jacquard_common::xrpc::XrpcRequest for DislikeSong<'a> { 55 + const NSID: &'static str = "app.rocksky.like.dislikeSong"; 56 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 57 + "application/json", 58 + ); 59 + type Response = DislikeSongResponse; 60 + } 61 + 62 + ///Endpoint type for 63 + ///app.rocksky.like.dislikeSong 64 + pub struct DislikeSongRequest; 65 + impl jacquard_common::xrpc::XrpcEndpoint for DislikeSongRequest { 66 + const PATH: &'static str = "/xrpc/app.rocksky.like.dislikeSong"; 67 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 68 + "application/json", 69 + ); 70 + type Request<'de> = DislikeSong<'de>; 71 + type Response = DislikeSongResponse; 72 + }
+72
crates/jacquard-api/src/app_rocksky/like/like_shout.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.like.likeShout 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[jacquard_derive::lexicon] 9 + #[derive( 10 + serde::Serialize, 11 + serde::Deserialize, 12 + Debug, 13 + Clone, 14 + PartialEq, 15 + Eq, 16 + jacquard_derive::IntoStatic, 17 + Default 18 + )] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct LikeShout<'a> { 21 + /// The unique identifier of the shout to like 22 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 23 + #[serde(borrow)] 24 + pub uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 25 + } 26 + 27 + #[jacquard_derive::lexicon] 28 + #[derive( 29 + serde::Serialize, 30 + serde::Deserialize, 31 + Debug, 32 + Clone, 33 + PartialEq, 34 + Eq, 35 + jacquard_derive::IntoStatic 36 + )] 37 + #[serde(rename_all = "camelCase")] 38 + pub struct LikeShoutOutput<'a> { 39 + #[serde(flatten)] 40 + #[serde(borrow)] 41 + pub value: crate::app_rocksky::shout::ShoutView<'a>, 42 + } 43 + 44 + ///Response type for 45 + ///app.rocksky.like.likeShout 46 + pub struct LikeShoutResponse; 47 + impl jacquard_common::xrpc::XrpcResp for LikeShoutResponse { 48 + const NSID: &'static str = "app.rocksky.like.likeShout"; 49 + const ENCODING: &'static str = "application/json"; 50 + type Output<'de> = LikeShoutOutput<'de>; 51 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 52 + } 53 + 54 + impl<'a> jacquard_common::xrpc::XrpcRequest for LikeShout<'a> { 55 + const NSID: &'static str = "app.rocksky.like.likeShout"; 56 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 57 + "application/json", 58 + ); 59 + type Response = LikeShoutResponse; 60 + } 61 + 62 + ///Endpoint type for 63 + ///app.rocksky.like.likeShout 64 + pub struct LikeShoutRequest; 65 + impl jacquard_common::xrpc::XrpcEndpoint for LikeShoutRequest { 66 + const PATH: &'static str = "/xrpc/app.rocksky.like.likeShout"; 67 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 68 + "application/json", 69 + ); 70 + type Request<'de> = LikeShout<'de>; 71 + type Response = LikeShoutResponse; 72 + }
+72
crates/jacquard-api/src/app_rocksky/like/like_song.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.like.likeSong 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[jacquard_derive::lexicon] 9 + #[derive( 10 + serde::Serialize, 11 + serde::Deserialize, 12 + Debug, 13 + Clone, 14 + PartialEq, 15 + Eq, 16 + jacquard_derive::IntoStatic, 17 + Default 18 + )] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct LikeSong<'a> { 21 + /// The unique identifier of the song to like 22 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 23 + #[serde(borrow)] 24 + pub uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 25 + } 26 + 27 + #[jacquard_derive::lexicon] 28 + #[derive( 29 + serde::Serialize, 30 + serde::Deserialize, 31 + Debug, 32 + Clone, 33 + PartialEq, 34 + Eq, 35 + jacquard_derive::IntoStatic 36 + )] 37 + #[serde(rename_all = "camelCase")] 38 + pub struct LikeSongOutput<'a> { 39 + #[serde(flatten)] 40 + #[serde(borrow)] 41 + pub value: crate::app_rocksky::song::SongViewDetailed<'a>, 42 + } 43 + 44 + ///Response type for 45 + ///app.rocksky.like.likeSong 46 + pub struct LikeSongResponse; 47 + impl jacquard_common::xrpc::XrpcResp for LikeSongResponse { 48 + const NSID: &'static str = "app.rocksky.like.likeSong"; 49 + const ENCODING: &'static str = "application/json"; 50 + type Output<'de> = LikeSongOutput<'de>; 51 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 52 + } 53 + 54 + impl<'a> jacquard_common::xrpc::XrpcRequest for LikeSong<'a> { 55 + const NSID: &'static str = "app.rocksky.like.likeSong"; 56 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 57 + "application/json", 58 + ); 59 + type Response = LikeSongResponse; 60 + } 61 + 62 + ///Endpoint type for 63 + ///app.rocksky.like.likeSong 64 + pub struct LikeSongRequest; 65 + impl jacquard_common::xrpc::XrpcEndpoint for LikeSongRequest { 66 + const PATH: &'static str = "/xrpc/app.rocksky.like.likeSong"; 67 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 68 + "application/json", 69 + ); 70 + type Request<'de> = LikeSong<'de>; 71 + type Response = LikeSongResponse; 72 + }
+73
crates/jacquard-api/src/app_rocksky/like.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.like 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + pub mod dislike_shout; 9 + pub mod dislike_song; 10 + pub mod like_shout; 11 + pub mod like_song; 12 + 13 + /// A declaration of a like. 14 + #[jacquard_derive::lexicon] 15 + #[derive( 16 + serde::Serialize, 17 + serde::Deserialize, 18 + Debug, 19 + Clone, 20 + PartialEq, 21 + Eq, 22 + jacquard_derive::IntoStatic, 23 + bon::Builder 24 + )] 25 + #[serde(rename_all = "camelCase")] 26 + pub struct Like<'a> { 27 + /// The date when the like was created. 28 + pub created_at: jacquard_common::types::string::Datetime, 29 + #[serde(borrow)] 30 + pub subject: crate::com_atproto::repo::strong_ref::StrongRef<'a>, 31 + } 32 + 33 + /// Typed wrapper for GetRecord response with this collection's record type. 34 + #[derive( 35 + serde::Serialize, 36 + serde::Deserialize, 37 + Debug, 38 + Clone, 39 + PartialEq, 40 + Eq, 41 + jacquard_derive::IntoStatic 42 + )] 43 + #[serde(rename_all = "camelCase")] 44 + pub struct LikeGetRecordOutput<'a> { 45 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 46 + #[serde(borrow)] 47 + pub cid: std::option::Option<jacquard_common::types::string::Cid<'a>>, 48 + #[serde(borrow)] 49 + pub uri: jacquard_common::types::string::AtUri<'a>, 50 + #[serde(borrow)] 51 + pub value: Like<'a>, 52 + } 53 + 54 + /// Marker type for deserializing records from this collection. 55 + pub struct LikeRecord; 56 + impl jacquard_common::xrpc::XrpcResp for LikeRecord { 57 + const NSID: &'static str = "app.rocksky.like"; 58 + const ENCODING: &'static str = "application/json"; 59 + type Output<'de> = LikeGetRecordOutput<'de>; 60 + type Err<'de> = jacquard_common::types::collection::RecordError<'de>; 61 + } 62 + 63 + impl jacquard_common::types::collection::Collection for Like<'_> { 64 + const NSID: &'static str = "app.rocksky.like"; 65 + type Record = LikeRecord; 66 + } 67 + 68 + impl From<LikeGetRecordOutput<'_>> for Like<'_> { 69 + fn from(output: LikeGetRecordOutput<'_>) -> Self { 70 + use jacquard_common::IntoStatic; 71 + output.value.into_static() 72 + } 73 + }
+67
crates/jacquard-api/src/app_rocksky/player/get_currently_playing.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.player.getCurrentlyPlaying 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetCurrentlyPlaying<'a> { 21 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 22 + #[serde(borrow)] 23 + pub actor: std::option::Option<jacquard_common::types::ident::AtIdentifier<'a>>, 24 + } 25 + 26 + #[jacquard_derive::lexicon] 27 + #[derive( 28 + serde::Serialize, 29 + serde::Deserialize, 30 + Debug, 31 + Clone, 32 + PartialEq, 33 + Eq, 34 + jacquard_derive::IntoStatic 35 + )] 36 + #[serde(rename_all = "camelCase")] 37 + pub struct GetCurrentlyPlayingOutput<'a> { 38 + #[serde(flatten)] 39 + #[serde(borrow)] 40 + pub value: crate::app_rocksky::player::CurrentlyPlayingViewDetailed<'a>, 41 + } 42 + 43 + ///Response type for 44 + ///app.rocksky.player.getCurrentlyPlaying 45 + pub struct GetCurrentlyPlayingResponse; 46 + impl jacquard_common::xrpc::XrpcResp for GetCurrentlyPlayingResponse { 47 + const NSID: &'static str = "app.rocksky.player.getCurrentlyPlaying"; 48 + const ENCODING: &'static str = "application/json"; 49 + type Output<'de> = GetCurrentlyPlayingOutput<'de>; 50 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 51 + } 52 + 53 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetCurrentlyPlaying<'a> { 54 + const NSID: &'static str = "app.rocksky.player.getCurrentlyPlaying"; 55 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 56 + type Response = GetCurrentlyPlayingResponse; 57 + } 58 + 59 + ///Endpoint type for 60 + ///app.rocksky.player.getCurrentlyPlaying 61 + pub struct GetCurrentlyPlayingRequest; 62 + impl jacquard_common::xrpc::XrpcEndpoint for GetCurrentlyPlayingRequest { 63 + const PATH: &'static str = "/xrpc/app.rocksky.player.getCurrentlyPlaying"; 64 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 65 + type Request<'de> = GetCurrentlyPlaying<'de>; 66 + type Response = GetCurrentlyPlayingResponse; 67 + }
+48
crates/jacquard-api/src/app_rocksky/player/next.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.player.next 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + /// XRPC request marker type 9 + #[derive( 10 + Debug, 11 + Clone, 12 + Copy, 13 + PartialEq, 14 + Eq, 15 + serde::Serialize, 16 + serde::Deserialize, 17 + jacquard_derive::IntoStatic 18 + )] 19 + pub struct Next; 20 + ///Response type for 21 + ///app.rocksky.player.next 22 + pub struct NextResponse; 23 + impl jacquard_common::xrpc::XrpcResp for NextResponse { 24 + const NSID: &'static str = "app.rocksky.player.next"; 25 + const ENCODING: &'static str = "application/json"; 26 + type Output<'de> = (); 27 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 28 + } 29 + 30 + impl jacquard_common::xrpc::XrpcRequest for Next { 31 + const NSID: &'static str = "app.rocksky.player.next"; 32 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 33 + "application/json", 34 + ); 35 + type Response = NextResponse; 36 + } 37 + 38 + ///Endpoint type for 39 + ///app.rocksky.player.next 40 + pub struct NextRequest; 41 + impl jacquard_common::xrpc::XrpcEndpoint for NextRequest { 42 + const PATH: &'static str = "/xrpc/app.rocksky.player.next"; 43 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 44 + "application/json", 45 + ); 46 + type Request<'de> = Next; 47 + type Response = NextResponse; 48 + }
+48
crates/jacquard-api/src/app_rocksky/player/pause.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.player.pause 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + /// XRPC request marker type 9 + #[derive( 10 + Debug, 11 + Clone, 12 + Copy, 13 + PartialEq, 14 + Eq, 15 + serde::Serialize, 16 + serde::Deserialize, 17 + jacquard_derive::IntoStatic 18 + )] 19 + pub struct Pause; 20 + ///Response type for 21 + ///app.rocksky.player.pause 22 + pub struct PauseResponse; 23 + impl jacquard_common::xrpc::XrpcResp for PauseResponse { 24 + const NSID: &'static str = "app.rocksky.player.pause"; 25 + const ENCODING: &'static str = "application/json"; 26 + type Output<'de> = (); 27 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 28 + } 29 + 30 + impl jacquard_common::xrpc::XrpcRequest for Pause { 31 + const NSID: &'static str = "app.rocksky.player.pause"; 32 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 33 + "application/json", 34 + ); 35 + type Response = PauseResponse; 36 + } 37 + 38 + ///Endpoint type for 39 + ///app.rocksky.player.pause 40 + pub struct PauseRequest; 41 + impl jacquard_common::xrpc::XrpcEndpoint for PauseRequest { 42 + const PATH: &'static str = "/xrpc/app.rocksky.player.pause"; 43 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 44 + "application/json", 45 + ); 46 + type Request<'de> = Pause; 47 + type Response = PauseResponse; 48 + }
+48
crates/jacquard-api/src/app_rocksky/player/play.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.player.play 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + /// XRPC request marker type 9 + #[derive( 10 + Debug, 11 + Clone, 12 + Copy, 13 + PartialEq, 14 + Eq, 15 + serde::Serialize, 16 + serde::Deserialize, 17 + jacquard_derive::IntoStatic 18 + )] 19 + pub struct Play; 20 + ///Response type for 21 + ///app.rocksky.player.play 22 + pub struct PlayResponse; 23 + impl jacquard_common::xrpc::XrpcResp for PlayResponse { 24 + const NSID: &'static str = "app.rocksky.player.play"; 25 + const ENCODING: &'static str = "application/json"; 26 + type Output<'de> = (); 27 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 28 + } 29 + 30 + impl jacquard_common::xrpc::XrpcRequest for Play { 31 + const NSID: &'static str = "app.rocksky.player.play"; 32 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 33 + "application/json", 34 + ); 35 + type Response = PlayResponse; 36 + } 37 + 38 + ///Endpoint type for 39 + ///app.rocksky.player.play 40 + pub struct PlayRequest; 41 + impl jacquard_common::xrpc::XrpcEndpoint for PlayRequest { 42 + const PATH: &'static str = "/xrpc/app.rocksky.player.play"; 43 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 44 + "application/json", 45 + ); 46 + type Request<'de> = Play; 47 + type Response = PlayResponse; 48 + }
+48
crates/jacquard-api/src/app_rocksky/player/previous.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.player.previous 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + /// XRPC request marker type 9 + #[derive( 10 + Debug, 11 + Clone, 12 + Copy, 13 + PartialEq, 14 + Eq, 15 + serde::Serialize, 16 + serde::Deserialize, 17 + jacquard_derive::IntoStatic 18 + )] 19 + pub struct Previous; 20 + ///Response type for 21 + ///app.rocksky.player.previous 22 + pub struct PreviousResponse; 23 + impl jacquard_common::xrpc::XrpcResp for PreviousResponse { 24 + const NSID: &'static str = "app.rocksky.player.previous"; 25 + const ENCODING: &'static str = "application/json"; 26 + type Output<'de> = (); 27 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 28 + } 29 + 30 + impl jacquard_common::xrpc::XrpcRequest for Previous { 31 + const NSID: &'static str = "app.rocksky.player.previous"; 32 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 33 + "application/json", 34 + ); 35 + type Response = PreviousResponse; 36 + } 37 + 38 + ///Endpoint type for 39 + ///app.rocksky.player.previous 40 + pub struct PreviousRequest; 41 + impl jacquard_common::xrpc::XrpcEndpoint for PreviousRequest { 42 + const PATH: &'static str = "/xrpc/app.rocksky.player.previous"; 43 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 44 + "application/json", 45 + ); 46 + type Request<'de> = Previous; 47 + type Response = PreviousResponse; 48 + }
+64
crates/jacquard-api/src/app_rocksky/player/seek.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.player.seek 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct SeekParams { 21 + pub position: i64, 22 + } 23 + 24 + /// XRPC request marker type 25 + #[derive( 26 + Debug, 27 + Clone, 28 + Copy, 29 + PartialEq, 30 + Eq, 31 + serde::Serialize, 32 + serde::Deserialize, 33 + jacquard_derive::IntoStatic 34 + )] 35 + pub struct Seek; 36 + ///Response type for 37 + ///app.rocksky.player.seek 38 + pub struct SeekResponse; 39 + impl jacquard_common::xrpc::XrpcResp for SeekResponse { 40 + const NSID: &'static str = "app.rocksky.player.seek"; 41 + const ENCODING: &'static str = "application/json"; 42 + type Output<'de> = (); 43 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 44 + } 45 + 46 + impl jacquard_common::xrpc::XrpcRequest for Seek { 47 + const NSID: &'static str = "app.rocksky.player.seek"; 48 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 49 + "application/json", 50 + ); 51 + type Response = SeekResponse; 52 + } 53 + 54 + ///Endpoint type for 55 + ///app.rocksky.player.seek 56 + pub struct SeekRequest; 57 + impl jacquard_common::xrpc::XrpcEndpoint for SeekRequest { 58 + const PATH: &'static str = "/xrpc/app.rocksky.player.seek"; 59 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 60 + "application/json", 61 + ); 62 + type Request<'de> = Seek; 63 + type Response = SeekResponse; 64 + }
+32
crates/jacquard-api/src/app_rocksky/player.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.player.defs 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + pub mod get_currently_playing; 9 + pub mod next; 10 + pub mod pause; 11 + pub mod play; 12 + pub mod previous; 13 + pub mod seek; 14 + 15 + #[jacquard_derive::lexicon] 16 + #[derive( 17 + serde::Serialize, 18 + serde::Deserialize, 19 + Debug, 20 + Clone, 21 + PartialEq, 22 + Eq, 23 + jacquard_derive::IntoStatic, 24 + Default 25 + )] 26 + #[serde(rename_all = "camelCase")] 27 + pub struct CurrentlyPlayingViewDetailed<'a> { 28 + /// The title of the currently playing track 29 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 30 + #[serde(borrow)] 31 + pub title: std::option::Option<jacquard_common::CowStr<'a>>, 32 + }
+66
crates/jacquard-api/src/app_rocksky/playlist/get_playlist.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.playlist.getPlaylist 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetPlaylist<'a> { 21 + #[serde(borrow)] 22 + pub uri: jacquard_common::types::string::AtUri<'a>, 23 + } 24 + 25 + #[jacquard_derive::lexicon] 26 + #[derive( 27 + serde::Serialize, 28 + serde::Deserialize, 29 + Debug, 30 + Clone, 31 + PartialEq, 32 + Eq, 33 + jacquard_derive::IntoStatic 34 + )] 35 + #[serde(rename_all = "camelCase")] 36 + pub struct GetPlaylistOutput<'a> { 37 + #[serde(flatten)] 38 + #[serde(borrow)] 39 + pub value: crate::app_rocksky::playlist::PlaylistViewDetailed<'a>, 40 + } 41 + 42 + ///Response type for 43 + ///app.rocksky.playlist.getPlaylist 44 + pub struct GetPlaylistResponse; 45 + impl jacquard_common::xrpc::XrpcResp for GetPlaylistResponse { 46 + const NSID: &'static str = "app.rocksky.playlist.getPlaylist"; 47 + const ENCODING: &'static str = "application/json"; 48 + type Output<'de> = GetPlaylistOutput<'de>; 49 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 50 + } 51 + 52 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetPlaylist<'a> { 53 + const NSID: &'static str = "app.rocksky.playlist.getPlaylist"; 54 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 55 + type Response = GetPlaylistResponse; 56 + } 57 + 58 + ///Endpoint type for 59 + ///app.rocksky.playlist.getPlaylist 60 + pub struct GetPlaylistRequest; 61 + impl jacquard_common::xrpc::XrpcEndpoint for GetPlaylistRequest { 62 + const PATH: &'static str = "/xrpc/app.rocksky.playlist.getPlaylist"; 63 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 64 + type Request<'de> = GetPlaylist<'de>; 65 + type Response = GetPlaylistResponse; 66 + }
+71
crates/jacquard-api/src/app_rocksky/playlist/get_playlists.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.playlist.getPlaylists 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetPlaylists { 21 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 22 + pub limit: std::option::Option<i64>, 23 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 24 + pub offset: std::option::Option<i64>, 25 + } 26 + 27 + #[jacquard_derive::lexicon] 28 + #[derive( 29 + serde::Serialize, 30 + serde::Deserialize, 31 + Debug, 32 + Clone, 33 + PartialEq, 34 + Eq, 35 + jacquard_derive::IntoStatic, 36 + Default 37 + )] 38 + #[serde(rename_all = "camelCase")] 39 + pub struct GetPlaylistsOutput<'a> { 40 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 41 + #[serde(borrow)] 42 + pub playlists: std::option::Option< 43 + Vec<crate::app_rocksky::playlist::PlaylistViewBasic<'a>>, 44 + >, 45 + } 46 + 47 + ///Response type for 48 + ///app.rocksky.playlist.getPlaylists 49 + pub struct GetPlaylistsResponse; 50 + impl jacquard_common::xrpc::XrpcResp for GetPlaylistsResponse { 51 + const NSID: &'static str = "app.rocksky.playlist.getPlaylists"; 52 + const ENCODING: &'static str = "application/json"; 53 + type Output<'de> = GetPlaylistsOutput<'de>; 54 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 55 + } 56 + 57 + impl jacquard_common::xrpc::XrpcRequest for GetPlaylists { 58 + const NSID: &'static str = "app.rocksky.playlist.getPlaylists"; 59 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 60 + type Response = GetPlaylistsResponse; 61 + } 62 + 63 + ///Endpoint type for 64 + ///app.rocksky.playlist.getPlaylists 65 + pub struct GetPlaylistsRequest; 66 + impl jacquard_common::xrpc::XrpcEndpoint for GetPlaylistsRequest { 67 + const PATH: &'static str = "/xrpc/app.rocksky.playlist.getPlaylists"; 68 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 69 + type Request<'de> = GetPlaylists; 70 + type Response = GetPlaylistsResponse; 71 + }
+233
crates/jacquard-api/src/app_rocksky/playlist.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.playlist.defs 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + pub mod get_playlist; 9 + pub mod get_playlists; 10 + 11 + /// A declaration of a playlist. 12 + #[jacquard_derive::lexicon] 13 + #[derive( 14 + serde::Serialize, 15 + serde::Deserialize, 16 + Debug, 17 + Clone, 18 + PartialEq, 19 + Eq, 20 + jacquard_derive::IntoStatic, 21 + bon::Builder 22 + )] 23 + #[serde(rename_all = "camelCase")] 24 + pub struct Playlist<'a> { 25 + /// The Apple Music link of the playlist. 26 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 27 + #[builder(into)] 28 + #[serde(borrow)] 29 + pub apple_music_link: Option<jacquard_common::CowStr<'a>>, 30 + /// The date the playlist was created. 31 + pub created_at: jacquard_common::types::string::Datetime, 32 + /// The playlist description. 33 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 34 + #[builder(into)] 35 + #[serde(borrow)] 36 + pub description: Option<jacquard_common::CowStr<'a>>, 37 + /// The name of the playlist. 38 + #[serde(borrow)] 39 + #[builder(into)] 40 + pub name: jacquard_common::CowStr<'a>, 41 + /// The picture of the playlist. 42 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 43 + #[builder(into)] 44 + #[serde(borrow)] 45 + pub picture: Option<jacquard_common::types::blob::Blob<'a>>, 46 + /// The Spotify link of the playlist. 47 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 48 + #[builder(into)] 49 + #[serde(borrow)] 50 + pub spotify_link: Option<jacquard_common::CowStr<'a>>, 51 + /// The Tidal link of the playlist. 52 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 53 + #[builder(into)] 54 + #[serde(borrow)] 55 + pub tidal_link: Option<jacquard_common::CowStr<'a>>, 56 + /// The tracks in the playlist. 57 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 58 + #[builder(into)] 59 + #[serde(borrow)] 60 + pub tracks: Option<Vec<jacquard_common::types::value::Data<'a>>>, 61 + /// The YouTube link of the playlist. 62 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 63 + #[builder(into)] 64 + #[serde(borrow)] 65 + pub youtube_link: Option<jacquard_common::CowStr<'a>>, 66 + } 67 + 68 + /// Typed wrapper for GetRecord response with this collection's record type. 69 + #[derive( 70 + serde::Serialize, 71 + serde::Deserialize, 72 + Debug, 73 + Clone, 74 + PartialEq, 75 + Eq, 76 + jacquard_derive::IntoStatic 77 + )] 78 + #[serde(rename_all = "camelCase")] 79 + pub struct PlaylistGetRecordOutput<'a> { 80 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 81 + #[serde(borrow)] 82 + pub cid: std::option::Option<jacquard_common::types::string::Cid<'a>>, 83 + #[serde(borrow)] 84 + pub uri: jacquard_common::types::string::AtUri<'a>, 85 + #[serde(borrow)] 86 + pub value: Playlist<'a>, 87 + } 88 + 89 + /// Marker type for deserializing records from this collection. 90 + pub struct PlaylistRecord; 91 + impl jacquard_common::xrpc::XrpcResp for PlaylistRecord { 92 + const NSID: &'static str = "app.rocksky.playlist"; 93 + const ENCODING: &'static str = "application/json"; 94 + type Output<'de> = PlaylistGetRecordOutput<'de>; 95 + type Err<'de> = jacquard_common::types::collection::RecordError<'de>; 96 + } 97 + 98 + impl jacquard_common::types::collection::Collection for Playlist<'_> { 99 + const NSID: &'static str = "app.rocksky.playlist"; 100 + type Record = PlaylistRecord; 101 + } 102 + 103 + impl From<PlaylistGetRecordOutput<'_>> for Playlist<'_> { 104 + fn from(output: PlaylistGetRecordOutput<'_>) -> Self { 105 + use jacquard_common::IntoStatic; 106 + output.value.into_static() 107 + } 108 + } 109 + 110 + /// Basic view of a playlist, including its metadata 111 + #[jacquard_derive::lexicon] 112 + #[derive( 113 + serde::Serialize, 114 + serde::Deserialize, 115 + Debug, 116 + Clone, 117 + PartialEq, 118 + Eq, 119 + jacquard_derive::IntoStatic, 120 + Default 121 + )] 122 + #[serde(rename_all = "camelCase")] 123 + pub struct PlaylistViewBasic<'a> { 124 + /// The URL of the cover image for the playlist. 125 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 126 + #[serde(borrow)] 127 + pub cover_image_url: std::option::Option<jacquard_common::types::string::Uri<'a>>, 128 + /// The date and time when the playlist was created. 129 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 130 + pub created_at: std::option::Option<jacquard_common::types::string::Datetime>, 131 + /// The URL of the avatar image of the curator. 132 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 133 + #[serde(borrow)] 134 + pub curator_avatar_url: std::option::Option<jacquard_common::types::string::Uri<'a>>, 135 + /// The DID of the curator of the playlist. 136 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 137 + #[serde(borrow)] 138 + pub curator_did: std::option::Option< 139 + jacquard_common::types::ident::AtIdentifier<'a>, 140 + >, 141 + /// The handle of the curator of the playlist. 142 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 143 + #[serde(borrow)] 144 + pub curator_handle: std::option::Option< 145 + jacquard_common::types::ident::AtIdentifier<'a>, 146 + >, 147 + /// The name of the curator of the playlist. 148 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 149 + #[serde(borrow)] 150 + pub curator_name: std::option::Option<jacquard_common::CowStr<'a>>, 151 + /// A description of the playlist. 152 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 153 + #[serde(borrow)] 154 + pub description: std::option::Option<jacquard_common::CowStr<'a>>, 155 + /// The unique identifier of the playlist. 156 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 157 + #[serde(borrow)] 158 + pub id: std::option::Option<jacquard_common::CowStr<'a>>, 159 + /// The title of the playlist. 160 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 161 + #[serde(borrow)] 162 + pub title: std::option::Option<jacquard_common::CowStr<'a>>, 163 + /// The number of tracks in the playlist. 164 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 165 + pub track_count: std::option::Option<i64>, 166 + /// The URI of the playlist. 167 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 168 + #[serde(borrow)] 169 + pub uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 170 + } 171 + 172 + /// Detailed view of a playlist, including its tracks and metadata 173 + #[jacquard_derive::lexicon] 174 + #[derive( 175 + serde::Serialize, 176 + serde::Deserialize, 177 + Debug, 178 + Clone, 179 + PartialEq, 180 + Eq, 181 + jacquard_derive::IntoStatic, 182 + Default 183 + )] 184 + #[serde(rename_all = "camelCase")] 185 + pub struct PlaylistViewDetailed<'a> { 186 + /// The URL of the cover image for the playlist. 187 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 188 + #[serde(borrow)] 189 + pub cover_image_url: std::option::Option<jacquard_common::types::string::Uri<'a>>, 190 + /// The date and time when the playlist was created. 191 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 192 + pub created_at: std::option::Option<jacquard_common::types::string::Datetime>, 193 + /// The URL of the avatar image of the curator. 194 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 195 + #[serde(borrow)] 196 + pub curator_avatar_url: std::option::Option<jacquard_common::types::string::Uri<'a>>, 197 + /// The DID of the curator of the playlist. 198 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 199 + #[serde(borrow)] 200 + pub curator_did: std::option::Option< 201 + jacquard_common::types::ident::AtIdentifier<'a>, 202 + >, 203 + /// The handle of the curator of the playlist. 204 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 205 + #[serde(borrow)] 206 + pub curator_handle: std::option::Option< 207 + jacquard_common::types::ident::AtIdentifier<'a>, 208 + >, 209 + /// The name of the curator of the playlist. 210 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 211 + #[serde(borrow)] 212 + pub curator_name: std::option::Option<jacquard_common::CowStr<'a>>, 213 + /// A description of the playlist. 214 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 215 + #[serde(borrow)] 216 + pub description: std::option::Option<jacquard_common::CowStr<'a>>, 217 + /// The unique identifier of the playlist. 218 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 219 + #[serde(borrow)] 220 + pub id: std::option::Option<jacquard_common::CowStr<'a>>, 221 + /// The title of the playlist. 222 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 223 + #[serde(borrow)] 224 + pub title: std::option::Option<jacquard_common::CowStr<'a>>, 225 + /// A list of tracks in the playlist. 226 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 227 + #[serde(borrow)] 228 + pub tracks: std::option::Option<Vec<crate::app_rocksky::song::SongViewBasic<'a>>>, 229 + /// The URI of the playlist. 230 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 231 + #[serde(borrow)] 232 + pub uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 233 + }
+169
crates/jacquard-api/src/app_rocksky/radio.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.radio.defs 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + /// A declaration of a radio station. 9 + #[jacquard_derive::lexicon] 10 + #[derive( 11 + serde::Serialize, 12 + serde::Deserialize, 13 + Debug, 14 + Clone, 15 + PartialEq, 16 + Eq, 17 + jacquard_derive::IntoStatic, 18 + bon::Builder 19 + )] 20 + #[serde(rename_all = "camelCase")] 21 + pub struct Radio<'a> { 22 + /// The date when the radio station was created. 23 + pub created_at: jacquard_common::types::string::Datetime, 24 + /// A description of the radio station. 25 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 26 + #[builder(into)] 27 + #[serde(borrow)] 28 + pub description: Option<jacquard_common::CowStr<'a>>, 29 + /// The genre of the radio station. 30 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 31 + #[builder(into)] 32 + #[serde(borrow)] 33 + pub genre: Option<jacquard_common::CowStr<'a>>, 34 + /// The logo of the radio station. 35 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 36 + #[builder(into)] 37 + #[serde(borrow)] 38 + pub logo: Option<jacquard_common::types::blob::Blob<'a>>, 39 + /// The name of the radio station. 40 + #[serde(borrow)] 41 + #[builder(into)] 42 + pub name: jacquard_common::CowStr<'a>, 43 + /// The URL of the radio station. 44 + #[serde(borrow)] 45 + pub url: jacquard_common::types::string::Uri<'a>, 46 + /// The website of the radio station. 47 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 48 + #[builder(into)] 49 + #[serde(borrow)] 50 + pub website: Option<jacquard_common::types::string::Uri<'a>>, 51 + } 52 + 53 + /// Typed wrapper for GetRecord response with this collection's record type. 54 + #[derive( 55 + serde::Serialize, 56 + serde::Deserialize, 57 + Debug, 58 + Clone, 59 + PartialEq, 60 + Eq, 61 + jacquard_derive::IntoStatic 62 + )] 63 + #[serde(rename_all = "camelCase")] 64 + pub struct RadioGetRecordOutput<'a> { 65 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 66 + #[serde(borrow)] 67 + pub cid: std::option::Option<jacquard_common::types::string::Cid<'a>>, 68 + #[serde(borrow)] 69 + pub uri: jacquard_common::types::string::AtUri<'a>, 70 + #[serde(borrow)] 71 + pub value: Radio<'a>, 72 + } 73 + 74 + /// Marker type for deserializing records from this collection. 75 + pub struct RadioRecord; 76 + impl jacquard_common::xrpc::XrpcResp for RadioRecord { 77 + const NSID: &'static str = "app.rocksky.radio"; 78 + const ENCODING: &'static str = "application/json"; 79 + type Output<'de> = RadioGetRecordOutput<'de>; 80 + type Err<'de> = jacquard_common::types::collection::RecordError<'de>; 81 + } 82 + 83 + impl jacquard_common::types::collection::Collection for Radio<'_> { 84 + const NSID: &'static str = "app.rocksky.radio"; 85 + type Record = RadioRecord; 86 + } 87 + 88 + impl From<RadioGetRecordOutput<'_>> for Radio<'_> { 89 + fn from(output: RadioGetRecordOutput<'_>) -> Self { 90 + use jacquard_common::IntoStatic; 91 + output.value.into_static() 92 + } 93 + } 94 + 95 + #[jacquard_derive::lexicon] 96 + #[derive( 97 + serde::Serialize, 98 + serde::Deserialize, 99 + Debug, 100 + Clone, 101 + PartialEq, 102 + Eq, 103 + jacquard_derive::IntoStatic, 104 + Default 105 + )] 106 + #[serde(rename_all = "camelCase")] 107 + pub struct RadioViewBasic<'a> { 108 + /// The date and time when the radio was created. 109 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 110 + pub created_at: std::option::Option<jacquard_common::types::string::Datetime>, 111 + /// A brief description of the radio. 112 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 113 + #[serde(borrow)] 114 + pub description: std::option::Option<jacquard_common::CowStr<'a>>, 115 + /// The unique identifier of the radio. 116 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 117 + #[serde(borrow)] 118 + pub id: std::option::Option<jacquard_common::CowStr<'a>>, 119 + /// The name of the radio. 120 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 121 + #[serde(borrow)] 122 + pub name: std::option::Option<jacquard_common::CowStr<'a>>, 123 + } 124 + 125 + #[jacquard_derive::lexicon] 126 + #[derive( 127 + serde::Serialize, 128 + serde::Deserialize, 129 + Debug, 130 + Clone, 131 + PartialEq, 132 + Eq, 133 + jacquard_derive::IntoStatic, 134 + Default 135 + )] 136 + #[serde(rename_all = "camelCase")] 137 + pub struct RadioViewDetailed<'a> { 138 + /// The date and time when the radio was created. 139 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 140 + pub created_at: std::option::Option<jacquard_common::types::string::Datetime>, 141 + /// A brief description of the radio. 142 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 143 + #[serde(borrow)] 144 + pub description: std::option::Option<jacquard_common::CowStr<'a>>, 145 + /// The genre of the radio. 146 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 147 + #[serde(borrow)] 148 + pub genre: std::option::Option<jacquard_common::CowStr<'a>>, 149 + /// The unique identifier of the radio. 150 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 151 + #[serde(borrow)] 152 + pub id: std::option::Option<jacquard_common::CowStr<'a>>, 153 + /// The logo of the radio station. 154 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 155 + #[serde(borrow)] 156 + pub logo: std::option::Option<jacquard_common::CowStr<'a>>, 157 + /// The name of the radio. 158 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 159 + #[serde(borrow)] 160 + pub name: std::option::Option<jacquard_common::CowStr<'a>>, 161 + /// The streaming URL of the radio. 162 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 163 + #[serde(borrow)] 164 + pub url: std::option::Option<jacquard_common::types::string::Uri<'a>>, 165 + /// The website of the radio. 166 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 167 + #[serde(borrow)] 168 + pub website: std::option::Option<jacquard_common::types::string::Uri<'a>>, 169 + }
+149
crates/jacquard-api/src/app_rocksky/scrobble/create_scrobble.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.scrobble.createScrobble 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[jacquard_derive::lexicon] 9 + #[derive( 10 + serde::Serialize, 11 + serde::Deserialize, 12 + Debug, 13 + Clone, 14 + PartialEq, 15 + Eq, 16 + jacquard_derive::IntoStatic, 17 + Default 18 + )] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct CreateScrobble<'a> { 21 + /// The album of the track being scrobbled 22 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 23 + #[serde(borrow)] 24 + pub album: std::option::Option<jacquard_common::CowStr<'a>>, 25 + /// The URL of the album art for the track 26 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 27 + #[serde(borrow)] 28 + pub album_art: std::option::Option<jacquard_common::types::string::Uri<'a>>, 29 + /// The Apple Music link for the track, if available 30 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 31 + #[serde(borrow)] 32 + pub apple_music_link: std::option::Option<jacquard_common::types::string::Uri<'a>>, 33 + /// The artist of the track being scrobbled 34 + #[serde(borrow)] 35 + pub artist: jacquard_common::CowStr<'a>, 36 + /// The URL of the artist's picture, if available 37 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 38 + #[serde(borrow)] 39 + pub artist_picture: std::option::Option<jacquard_common::types::string::Uri<'a>>, 40 + /// The composer of the track, if available 41 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 42 + #[serde(borrow)] 43 + pub composer: std::option::Option<jacquard_common::CowStr<'a>>, 44 + /// The copyright message for the track, if available 45 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 46 + #[serde(borrow)] 47 + pub copyright_message: std::option::Option<jacquard_common::CowStr<'a>>, 48 + /// The Deezer link for the track, if available 49 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 50 + #[serde(borrow)] 51 + pub deezer_link: std::option::Option<jacquard_common::types::string::Uri<'a>>, 52 + /// The disc number of the track in the album, if applicable 53 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 54 + pub disc_number: std::option::Option<i64>, 55 + /// The duration of the track in seconds 56 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 57 + pub duration: std::option::Option<i64>, 58 + /// The record label of the track, if available 59 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 60 + #[serde(borrow)] 61 + pub label: std::option::Option<jacquard_common::CowStr<'a>>, 62 + /// The Last.fm link for the track, if available 63 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 64 + #[serde(borrow)] 65 + pub lastfm_link: std::option::Option<jacquard_common::types::string::Uri<'a>>, 66 + /// The lyrics of the track, if available 67 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 68 + #[serde(borrow)] 69 + pub lyrics: std::option::Option<jacquard_common::CowStr<'a>>, 70 + /// The MusicBrainz ID of the track, if available 71 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 72 + #[serde(borrow)] 73 + pub mb_id: std::option::Option<jacquard_common::CowStr<'a>>, 74 + /// The release date of the track, formatted as YYYY-MM-DD 75 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 76 + #[serde(borrow)] 77 + pub release_date: std::option::Option<jacquard_common::CowStr<'a>>, 78 + /// The Spotify link for the track, if available 79 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 80 + #[serde(borrow)] 81 + pub spotify_link: std::option::Option<jacquard_common::types::string::Uri<'a>>, 82 + /// The Tidal link for the track, if available 83 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 84 + #[serde(borrow)] 85 + pub tidal_link: std::option::Option<jacquard_common::types::string::Uri<'a>>, 86 + /// The timestamp of the scrobble in milliseconds since epoch 87 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 88 + pub timestamp: std::option::Option<i64>, 89 + /// The title of the track being scrobbled 90 + #[serde(borrow)] 91 + pub title: jacquard_common::CowStr<'a>, 92 + /// The track number of the track in the album 93 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 94 + pub track_number: std::option::Option<i64>, 95 + /// The year the track was released 96 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 97 + pub year: std::option::Option<i64>, 98 + /// The Youtube link for the track, if available 99 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 100 + #[serde(borrow)] 101 + pub youtube_link: std::option::Option<jacquard_common::types::string::Uri<'a>>, 102 + } 103 + 104 + #[jacquard_derive::lexicon] 105 + #[derive( 106 + serde::Serialize, 107 + serde::Deserialize, 108 + Debug, 109 + Clone, 110 + PartialEq, 111 + Eq, 112 + jacquard_derive::IntoStatic 113 + )] 114 + #[serde(rename_all = "camelCase")] 115 + pub struct CreateScrobbleOutput<'a> { 116 + #[serde(flatten)] 117 + #[serde(borrow)] 118 + pub value: crate::app_rocksky::scrobble::ScrobbleViewBasic<'a>, 119 + } 120 + 121 + ///Response type for 122 + ///app.rocksky.scrobble.createScrobble 123 + pub struct CreateScrobbleResponse; 124 + impl jacquard_common::xrpc::XrpcResp for CreateScrobbleResponse { 125 + const NSID: &'static str = "app.rocksky.scrobble.createScrobble"; 126 + const ENCODING: &'static str = "application/json"; 127 + type Output<'de> = CreateScrobbleOutput<'de>; 128 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 129 + } 130 + 131 + impl<'a> jacquard_common::xrpc::XrpcRequest for CreateScrobble<'a> { 132 + const NSID: &'static str = "app.rocksky.scrobble.createScrobble"; 133 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 134 + "application/json", 135 + ); 136 + type Response = CreateScrobbleResponse; 137 + } 138 + 139 + ///Endpoint type for 140 + ///app.rocksky.scrobble.createScrobble 141 + pub struct CreateScrobbleRequest; 142 + impl jacquard_common::xrpc::XrpcEndpoint for CreateScrobbleRequest { 143 + const PATH: &'static str = "/xrpc/app.rocksky.scrobble.createScrobble"; 144 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 145 + "application/json", 146 + ); 147 + type Request<'de> = CreateScrobble<'de>; 148 + type Response = CreateScrobbleResponse; 149 + }
+66
crates/jacquard-api/src/app_rocksky/scrobble/get_scrobble.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.scrobble.getScrobble 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetScrobble<'a> { 21 + #[serde(borrow)] 22 + pub uri: jacquard_common::types::string::AtUri<'a>, 23 + } 24 + 25 + #[jacquard_derive::lexicon] 26 + #[derive( 27 + serde::Serialize, 28 + serde::Deserialize, 29 + Debug, 30 + Clone, 31 + PartialEq, 32 + Eq, 33 + jacquard_derive::IntoStatic 34 + )] 35 + #[serde(rename_all = "camelCase")] 36 + pub struct GetScrobbleOutput<'a> { 37 + #[serde(flatten)] 38 + #[serde(borrow)] 39 + pub value: crate::app_rocksky::scrobble::ScrobbleViewDetailed<'a>, 40 + } 41 + 42 + ///Response type for 43 + ///app.rocksky.scrobble.getScrobble 44 + pub struct GetScrobbleResponse; 45 + impl jacquard_common::xrpc::XrpcResp for GetScrobbleResponse { 46 + const NSID: &'static str = "app.rocksky.scrobble.getScrobble"; 47 + const ENCODING: &'static str = "application/json"; 48 + type Output<'de> = GetScrobbleOutput<'de>; 49 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 50 + } 51 + 52 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetScrobble<'a> { 53 + const NSID: &'static str = "app.rocksky.scrobble.getScrobble"; 54 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 55 + type Response = GetScrobbleResponse; 56 + } 57 + 58 + ///Endpoint type for 59 + ///app.rocksky.scrobble.getScrobble 60 + pub struct GetScrobbleRequest; 61 + impl jacquard_common::xrpc::XrpcEndpoint for GetScrobbleRequest { 62 + const PATH: &'static str = "/xrpc/app.rocksky.scrobble.getScrobble"; 63 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 64 + type Request<'de> = GetScrobble<'de>; 65 + type Response = GetScrobbleResponse; 66 + }
+76
crates/jacquard-api/src/app_rocksky/scrobble/get_scrobbles.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.scrobble.getScrobbles 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetScrobbles<'a> { 21 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 22 + #[serde(borrow)] 23 + pub did: std::option::Option<jacquard_common::types::ident::AtIdentifier<'a>>, 24 + ///(min: 1) 25 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 26 + pub limit: std::option::Option<i64>, 27 + ///(min: 0) 28 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 29 + pub offset: std::option::Option<i64>, 30 + } 31 + 32 + #[jacquard_derive::lexicon] 33 + #[derive( 34 + serde::Serialize, 35 + serde::Deserialize, 36 + Debug, 37 + Clone, 38 + PartialEq, 39 + Eq, 40 + jacquard_derive::IntoStatic, 41 + Default 42 + )] 43 + #[serde(rename_all = "camelCase")] 44 + pub struct GetScrobblesOutput<'a> { 45 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 46 + #[serde(borrow)] 47 + pub scrobbles: std::option::Option< 48 + Vec<crate::app_rocksky::scrobble::ScrobbleViewBasic<'a>>, 49 + >, 50 + } 51 + 52 + ///Response type for 53 + ///app.rocksky.scrobble.getScrobbles 54 + pub struct GetScrobblesResponse; 55 + impl jacquard_common::xrpc::XrpcResp for GetScrobblesResponse { 56 + const NSID: &'static str = "app.rocksky.scrobble.getScrobbles"; 57 + const ENCODING: &'static str = "application/json"; 58 + type Output<'de> = GetScrobblesOutput<'de>; 59 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 60 + } 61 + 62 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetScrobbles<'a> { 63 + const NSID: &'static str = "app.rocksky.scrobble.getScrobbles"; 64 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 65 + type Response = GetScrobblesResponse; 66 + } 67 + 68 + ///Endpoint type for 69 + ///app.rocksky.scrobble.getScrobbles 70 + pub struct GetScrobblesRequest; 71 + impl jacquard_common::xrpc::XrpcEndpoint for GetScrobblesRequest { 72 + const PATH: &'static str = "/xrpc/app.rocksky.scrobble.getScrobbles"; 73 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 74 + type Request<'de> = GetScrobbles<'de>; 75 + type Response = GetScrobblesResponse; 76 + }
+291
crates/jacquard-api/src/app_rocksky/scrobble.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.scrobble.defs 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + pub mod create_scrobble; 9 + pub mod get_scrobble; 10 + pub mod get_scrobbles; 11 + 12 + /// A declaration of a scrobble. 13 + #[jacquard_derive::lexicon] 14 + #[derive( 15 + serde::Serialize, 16 + serde::Deserialize, 17 + Debug, 18 + Clone, 19 + PartialEq, 20 + Eq, 21 + jacquard_derive::IntoStatic, 22 + bon::Builder 23 + )] 24 + #[serde(rename_all = "camelCase")] 25 + pub struct Scrobble<'a> { 26 + /// The album of the song. 27 + #[serde(borrow)] 28 + #[builder(into)] 29 + pub album: jacquard_common::CowStr<'a>, 30 + /// The album art of the song. 31 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 32 + #[builder(into)] 33 + #[serde(borrow)] 34 + pub album_art: Option<jacquard_common::types::blob::Blob<'a>>, 35 + /// The album artist of the song. 36 + #[serde(borrow)] 37 + #[builder(into)] 38 + pub album_artist: jacquard_common::CowStr<'a>, 39 + /// The Apple Music link of the song. 40 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 41 + #[builder(into)] 42 + #[serde(borrow)] 43 + pub apple_music_link: Option<jacquard_common::types::string::Uri<'a>>, 44 + /// The artist of the song. 45 + #[serde(borrow)] 46 + #[builder(into)] 47 + pub artist: jacquard_common::CowStr<'a>, 48 + /// The composer of the song. 49 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 50 + #[builder(into)] 51 + #[serde(borrow)] 52 + pub composer: Option<jacquard_common::CowStr<'a>>, 53 + /// The copyright message of the song. 54 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 55 + #[builder(into)] 56 + #[serde(borrow)] 57 + pub copyright_message: Option<jacquard_common::CowStr<'a>>, 58 + /// The date when the song was created. 59 + pub created_at: jacquard_common::types::string::Datetime, 60 + /// The disc number of the song in the album. 61 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 62 + #[builder(into)] 63 + pub disc_number: Option<i64>, 64 + /// The duration of the song in seconds. 65 + pub duration: i64, 66 + /// The genre of the song. 67 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 68 + #[builder(into)] 69 + #[serde(borrow)] 70 + pub genre: Option<jacquard_common::CowStr<'a>>, 71 + /// The label of the song. 72 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 73 + #[builder(into)] 74 + #[serde(borrow)] 75 + pub label: Option<jacquard_common::CowStr<'a>>, 76 + /// The lyrics of the song. 77 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 78 + #[builder(into)] 79 + #[serde(borrow)] 80 + pub lyrics: Option<jacquard_common::CowStr<'a>>, 81 + /// The MusicBrainz ID of the song. 82 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 83 + #[builder(into)] 84 + #[serde(borrow)] 85 + pub mbid: Option<jacquard_common::CowStr<'a>>, 86 + /// The release date of the song. 87 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 88 + #[builder(into)] 89 + pub release_date: Option<jacquard_common::types::string::Datetime>, 90 + /// The Spotify link of the song. 91 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 92 + #[builder(into)] 93 + #[serde(borrow)] 94 + pub spotify_link: Option<jacquard_common::types::string::Uri<'a>>, 95 + /// The tags of the song. 96 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 97 + #[builder(into)] 98 + #[serde(borrow)] 99 + pub tags: Option<Vec<jacquard_common::CowStr<'a>>>, 100 + /// The Tidal link of the song. 101 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 102 + #[builder(into)] 103 + #[serde(borrow)] 104 + pub tidal_link: Option<jacquard_common::types::string::Uri<'a>>, 105 + /// The title of the song. 106 + #[serde(borrow)] 107 + #[builder(into)] 108 + pub title: jacquard_common::CowStr<'a>, 109 + /// The track number of the song in the album. 110 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 111 + #[builder(into)] 112 + pub track_number: Option<i64>, 113 + /// Informations about the song 114 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 115 + #[builder(into)] 116 + #[serde(borrow)] 117 + pub wiki: Option<jacquard_common::CowStr<'a>>, 118 + /// The year the song was released. 119 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 120 + #[builder(into)] 121 + pub year: Option<i64>, 122 + /// The YouTube link of the song. 123 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 124 + #[builder(into)] 125 + #[serde(borrow)] 126 + pub youtube_link: Option<jacquard_common::types::string::Uri<'a>>, 127 + } 128 + 129 + /// Typed wrapper for GetRecord response with this collection's record type. 130 + #[derive( 131 + serde::Serialize, 132 + serde::Deserialize, 133 + Debug, 134 + Clone, 135 + PartialEq, 136 + Eq, 137 + jacquard_derive::IntoStatic 138 + )] 139 + #[serde(rename_all = "camelCase")] 140 + pub struct ScrobbleGetRecordOutput<'a> { 141 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 142 + #[serde(borrow)] 143 + pub cid: std::option::Option<jacquard_common::types::string::Cid<'a>>, 144 + #[serde(borrow)] 145 + pub uri: jacquard_common::types::string::AtUri<'a>, 146 + #[serde(borrow)] 147 + pub value: Scrobble<'a>, 148 + } 149 + 150 + /// Marker type for deserializing records from this collection. 151 + pub struct ScrobbleRecord; 152 + impl jacquard_common::xrpc::XrpcResp for ScrobbleRecord { 153 + const NSID: &'static str = "app.rocksky.scrobble"; 154 + const ENCODING: &'static str = "application/json"; 155 + type Output<'de> = ScrobbleGetRecordOutput<'de>; 156 + type Err<'de> = jacquard_common::types::collection::RecordError<'de>; 157 + } 158 + 159 + impl jacquard_common::types::collection::Collection for Scrobble<'_> { 160 + const NSID: &'static str = "app.rocksky.scrobble"; 161 + type Record = ScrobbleRecord; 162 + } 163 + 164 + impl From<ScrobbleGetRecordOutput<'_>> for Scrobble<'_> { 165 + fn from(output: ScrobbleGetRecordOutput<'_>) -> Self { 166 + use jacquard_common::IntoStatic; 167 + output.value.into_static() 168 + } 169 + } 170 + 171 + #[jacquard_derive::lexicon] 172 + #[derive( 173 + serde::Serialize, 174 + serde::Deserialize, 175 + Debug, 176 + Clone, 177 + PartialEq, 178 + Eq, 179 + jacquard_derive::IntoStatic, 180 + Default 181 + )] 182 + #[serde(rename_all = "camelCase")] 183 + pub struct ScrobbleViewBasic<'a> { 184 + /// The album of the song. 185 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 186 + #[serde(borrow)] 187 + pub album: std::option::Option<jacquard_common::CowStr<'a>>, 188 + /// The URI of the album. 189 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 190 + #[serde(borrow)] 191 + pub album_uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 192 + /// The artist of the song. 193 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 194 + #[serde(borrow)] 195 + pub artist: std::option::Option<jacquard_common::CowStr<'a>>, 196 + /// The URI of the artist. 197 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 198 + #[serde(borrow)] 199 + pub artist_uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 200 + /// The album art URL of the song. 201 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 202 + #[serde(borrow)] 203 + pub cover: std::option::Option<jacquard_common::types::string::Uri<'a>>, 204 + /// The timestamp when the scrobble was created. 205 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 206 + pub date: std::option::Option<jacquard_common::types::string::Datetime>, 207 + /// The unique identifier of the scrobble. 208 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 209 + #[serde(borrow)] 210 + pub id: std::option::Option<jacquard_common::CowStr<'a>>, 211 + /// The SHA256 hash of the scrobble data. 212 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 213 + #[serde(borrow)] 214 + pub sha256: std::option::Option<jacquard_common::CowStr<'a>>, 215 + /// The title of the scrobble. 216 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 217 + #[serde(borrow)] 218 + pub title: std::option::Option<jacquard_common::CowStr<'a>>, 219 + /// The URI of the scrobble. 220 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 221 + #[serde(borrow)] 222 + pub uri: std::option::Option<jacquard_common::types::string::Uri<'a>>, 223 + /// The handle of the user who created the scrobble. 224 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 225 + #[serde(borrow)] 226 + pub user: std::option::Option<jacquard_common::CowStr<'a>>, 227 + } 228 + 229 + #[jacquard_derive::lexicon] 230 + #[derive( 231 + serde::Serialize, 232 + serde::Deserialize, 233 + Debug, 234 + Clone, 235 + PartialEq, 236 + Eq, 237 + jacquard_derive::IntoStatic, 238 + Default 239 + )] 240 + #[serde(rename_all = "camelCase")] 241 + pub struct ScrobbleViewDetailed<'a> { 242 + /// The album of the song. 243 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 244 + #[serde(borrow)] 245 + pub album: std::option::Option<jacquard_common::CowStr<'a>>, 246 + /// The URI of the album. 247 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 248 + #[serde(borrow)] 249 + pub album_uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 250 + /// The artist of the song. 251 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 252 + #[serde(borrow)] 253 + pub artist: std::option::Option<jacquard_common::CowStr<'a>>, 254 + /// The URI of the artist. 255 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 256 + #[serde(borrow)] 257 + pub artist_uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 258 + /// The album art URL of the song. 259 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 260 + #[serde(borrow)] 261 + pub cover: std::option::Option<jacquard_common::types::string::Uri<'a>>, 262 + /// The timestamp when the scrobble was created. 263 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 264 + pub date: std::option::Option<jacquard_common::types::string::Datetime>, 265 + /// The unique identifier of the scrobble. 266 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 267 + #[serde(borrow)] 268 + pub id: std::option::Option<jacquard_common::CowStr<'a>>, 269 + /// The number of listeners 270 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 271 + pub listeners: std::option::Option<i64>, 272 + /// The number of scrobbles for this song 273 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 274 + pub scrobbles: std::option::Option<i64>, 275 + /// The SHA256 hash of the scrobble data. 276 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 277 + #[serde(borrow)] 278 + pub sha256: std::option::Option<jacquard_common::CowStr<'a>>, 279 + /// The title of the scrobble. 280 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 281 + #[serde(borrow)] 282 + pub title: std::option::Option<jacquard_common::CowStr<'a>>, 283 + /// The URI of the scrobble. 284 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 285 + #[serde(borrow)] 286 + pub uri: std::option::Option<jacquard_common::types::string::Uri<'a>>, 287 + /// The handle of the user who created the scrobble. 288 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 289 + #[serde(borrow)] 290 + pub user: std::option::Option<jacquard_common::CowStr<'a>>, 291 + }
+72
crates/jacquard-api/src/app_rocksky/shout/create_shout.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.shout.createShout 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[jacquard_derive::lexicon] 9 + #[derive( 10 + serde::Serialize, 11 + serde::Deserialize, 12 + Debug, 13 + Clone, 14 + PartialEq, 15 + Eq, 16 + jacquard_derive::IntoStatic, 17 + Default 18 + )] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct CreateShout<'a> { 21 + /// The content of the shout 22 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 23 + #[serde(borrow)] 24 + pub message: std::option::Option<jacquard_common::CowStr<'a>>, 25 + } 26 + 27 + #[jacquard_derive::lexicon] 28 + #[derive( 29 + serde::Serialize, 30 + serde::Deserialize, 31 + Debug, 32 + Clone, 33 + PartialEq, 34 + Eq, 35 + jacquard_derive::IntoStatic 36 + )] 37 + #[serde(rename_all = "camelCase")] 38 + pub struct CreateShoutOutput<'a> { 39 + #[serde(flatten)] 40 + #[serde(borrow)] 41 + pub value: crate::app_rocksky::shout::ShoutView<'a>, 42 + } 43 + 44 + ///Response type for 45 + ///app.rocksky.shout.createShout 46 + pub struct CreateShoutResponse; 47 + impl jacquard_common::xrpc::XrpcResp for CreateShoutResponse { 48 + const NSID: &'static str = "app.rocksky.shout.createShout"; 49 + const ENCODING: &'static str = "application/json"; 50 + type Output<'de> = CreateShoutOutput<'de>; 51 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 52 + } 53 + 54 + impl<'a> jacquard_common::xrpc::XrpcRequest for CreateShout<'a> { 55 + const NSID: &'static str = "app.rocksky.shout.createShout"; 56 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 57 + "application/json", 58 + ); 59 + type Response = CreateShoutResponse; 60 + } 61 + 62 + ///Endpoint type for 63 + ///app.rocksky.shout.createShout 64 + pub struct CreateShoutRequest; 65 + impl jacquard_common::xrpc::XrpcEndpoint for CreateShoutRequest { 66 + const PATH: &'static str = "/xrpc/app.rocksky.shout.createShout"; 67 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 68 + "application/json", 69 + ); 70 + type Request<'de> = CreateShout<'de>; 71 + type Response = CreateShoutResponse; 72 + }
+73
crates/jacquard-api/src/app_rocksky/shout/get_album_shouts.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.shout.getAlbumShouts 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetAlbumShouts<'a> { 21 + ///(min: 1) 22 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 23 + pub limit: std::option::Option<i64>, 24 + ///(min: 0) 25 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 26 + pub offset: std::option::Option<i64>, 27 + #[serde(borrow)] 28 + pub uri: jacquard_common::types::string::AtUri<'a>, 29 + } 30 + 31 + #[jacquard_derive::lexicon] 32 + #[derive( 33 + serde::Serialize, 34 + serde::Deserialize, 35 + Debug, 36 + Clone, 37 + PartialEq, 38 + Eq, 39 + jacquard_derive::IntoStatic, 40 + Default 41 + )] 42 + #[serde(rename_all = "camelCase")] 43 + pub struct GetAlbumShoutsOutput<'a> { 44 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 45 + #[serde(borrow)] 46 + pub shouts: std::option::Option<Vec<jacquard_common::types::value::Data<'a>>>, 47 + } 48 + 49 + ///Response type for 50 + ///app.rocksky.shout.getAlbumShouts 51 + pub struct GetAlbumShoutsResponse; 52 + impl jacquard_common::xrpc::XrpcResp for GetAlbumShoutsResponse { 53 + const NSID: &'static str = "app.rocksky.shout.getAlbumShouts"; 54 + const ENCODING: &'static str = "application/json"; 55 + type Output<'de> = GetAlbumShoutsOutput<'de>; 56 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 57 + } 58 + 59 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetAlbumShouts<'a> { 60 + const NSID: &'static str = "app.rocksky.shout.getAlbumShouts"; 61 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 62 + type Response = GetAlbumShoutsResponse; 63 + } 64 + 65 + ///Endpoint type for 66 + ///app.rocksky.shout.getAlbumShouts 67 + pub struct GetAlbumShoutsRequest; 68 + impl jacquard_common::xrpc::XrpcEndpoint for GetAlbumShoutsRequest { 69 + const PATH: &'static str = "/xrpc/app.rocksky.shout.getAlbumShouts"; 70 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 71 + type Request<'de> = GetAlbumShouts<'de>; 72 + type Response = GetAlbumShoutsResponse; 73 + }
+73
crates/jacquard-api/src/app_rocksky/shout/get_artist_shouts.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.shout.getArtistShouts 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetArtistShouts<'a> { 21 + ///(min: 1) 22 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 23 + pub limit: std::option::Option<i64>, 24 + ///(min: 0) 25 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 26 + pub offset: std::option::Option<i64>, 27 + #[serde(borrow)] 28 + pub uri: jacquard_common::types::string::AtUri<'a>, 29 + } 30 + 31 + #[jacquard_derive::lexicon] 32 + #[derive( 33 + serde::Serialize, 34 + serde::Deserialize, 35 + Debug, 36 + Clone, 37 + PartialEq, 38 + Eq, 39 + jacquard_derive::IntoStatic, 40 + Default 41 + )] 42 + #[serde(rename_all = "camelCase")] 43 + pub struct GetArtistShoutsOutput<'a> { 44 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 45 + #[serde(borrow)] 46 + pub shouts: std::option::Option<Vec<jacquard_common::types::value::Data<'a>>>, 47 + } 48 + 49 + ///Response type for 50 + ///app.rocksky.shout.getArtistShouts 51 + pub struct GetArtistShoutsResponse; 52 + impl jacquard_common::xrpc::XrpcResp for GetArtistShoutsResponse { 53 + const NSID: &'static str = "app.rocksky.shout.getArtistShouts"; 54 + const ENCODING: &'static str = "application/json"; 55 + type Output<'de> = GetArtistShoutsOutput<'de>; 56 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 57 + } 58 + 59 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetArtistShouts<'a> { 60 + const NSID: &'static str = "app.rocksky.shout.getArtistShouts"; 61 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 62 + type Response = GetArtistShoutsResponse; 63 + } 64 + 65 + ///Endpoint type for 66 + ///app.rocksky.shout.getArtistShouts 67 + pub struct GetArtistShoutsRequest; 68 + impl jacquard_common::xrpc::XrpcEndpoint for GetArtistShoutsRequest { 69 + const PATH: &'static str = "/xrpc/app.rocksky.shout.getArtistShouts"; 70 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 71 + type Request<'de> = GetArtistShouts<'de>; 72 + type Response = GetArtistShoutsResponse; 73 + }
+73
crates/jacquard-api/src/app_rocksky/shout/get_profile_shouts.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.shout.getProfileShouts 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetProfileShouts<'a> { 21 + #[serde(borrow)] 22 + pub did: jacquard_common::types::ident::AtIdentifier<'a>, 23 + ///(min: 1) 24 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 25 + pub limit: std::option::Option<i64>, 26 + ///(min: 0) 27 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 28 + pub offset: std::option::Option<i64>, 29 + } 30 + 31 + #[jacquard_derive::lexicon] 32 + #[derive( 33 + serde::Serialize, 34 + serde::Deserialize, 35 + Debug, 36 + Clone, 37 + PartialEq, 38 + Eq, 39 + jacquard_derive::IntoStatic, 40 + Default 41 + )] 42 + #[serde(rename_all = "camelCase")] 43 + pub struct GetProfileShoutsOutput<'a> { 44 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 45 + #[serde(borrow)] 46 + pub shouts: std::option::Option<Vec<jacquard_common::types::value::Data<'a>>>, 47 + } 48 + 49 + ///Response type for 50 + ///app.rocksky.shout.getProfileShouts 51 + pub struct GetProfileShoutsResponse; 52 + impl jacquard_common::xrpc::XrpcResp for GetProfileShoutsResponse { 53 + const NSID: &'static str = "app.rocksky.shout.getProfileShouts"; 54 + const ENCODING: &'static str = "application/json"; 55 + type Output<'de> = GetProfileShoutsOutput<'de>; 56 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 57 + } 58 + 59 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetProfileShouts<'a> { 60 + const NSID: &'static str = "app.rocksky.shout.getProfileShouts"; 61 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 62 + type Response = GetProfileShoutsResponse; 63 + } 64 + 65 + ///Endpoint type for 66 + ///app.rocksky.shout.getProfileShouts 67 + pub struct GetProfileShoutsRequest; 68 + impl jacquard_common::xrpc::XrpcEndpoint for GetProfileShoutsRequest { 69 + const PATH: &'static str = "/xrpc/app.rocksky.shout.getProfileShouts"; 70 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 71 + type Request<'de> = GetProfileShouts<'de>; 72 + type Response = GetProfileShoutsResponse; 73 + }
+73
crates/jacquard-api/src/app_rocksky/shout/get_shout_replies.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.shout.getShoutReplies 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetShoutReplies<'a> { 21 + ///(min: 1) 22 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 23 + pub limit: std::option::Option<i64>, 24 + ///(min: 0) 25 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 26 + pub offset: std::option::Option<i64>, 27 + #[serde(borrow)] 28 + pub uri: jacquard_common::types::string::AtUri<'a>, 29 + } 30 + 31 + #[jacquard_derive::lexicon] 32 + #[derive( 33 + serde::Serialize, 34 + serde::Deserialize, 35 + Debug, 36 + Clone, 37 + PartialEq, 38 + Eq, 39 + jacquard_derive::IntoStatic, 40 + Default 41 + )] 42 + #[serde(rename_all = "camelCase")] 43 + pub struct GetShoutRepliesOutput<'a> { 44 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 45 + #[serde(borrow)] 46 + pub shouts: std::option::Option<Vec<jacquard_common::types::value::Data<'a>>>, 47 + } 48 + 49 + ///Response type for 50 + ///app.rocksky.shout.getShoutReplies 51 + pub struct GetShoutRepliesResponse; 52 + impl jacquard_common::xrpc::XrpcResp for GetShoutRepliesResponse { 53 + const NSID: &'static str = "app.rocksky.shout.getShoutReplies"; 54 + const ENCODING: &'static str = "application/json"; 55 + type Output<'de> = GetShoutRepliesOutput<'de>; 56 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 57 + } 58 + 59 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetShoutReplies<'a> { 60 + const NSID: &'static str = "app.rocksky.shout.getShoutReplies"; 61 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 62 + type Response = GetShoutRepliesResponse; 63 + } 64 + 65 + ///Endpoint type for 66 + ///app.rocksky.shout.getShoutReplies 67 + pub struct GetShoutRepliesRequest; 68 + impl jacquard_common::xrpc::XrpcEndpoint for GetShoutRepliesRequest { 69 + const PATH: &'static str = "/xrpc/app.rocksky.shout.getShoutReplies"; 70 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 71 + type Request<'de> = GetShoutReplies<'de>; 72 + type Response = GetShoutRepliesResponse; 73 + }
+67
crates/jacquard-api/src/app_rocksky/shout/get_track_shouts.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.shout.getTrackShouts 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetTrackShouts<'a> { 21 + #[serde(borrow)] 22 + pub uri: jacquard_common::types::string::AtUri<'a>, 23 + } 24 + 25 + #[jacquard_derive::lexicon] 26 + #[derive( 27 + serde::Serialize, 28 + serde::Deserialize, 29 + Debug, 30 + Clone, 31 + PartialEq, 32 + Eq, 33 + jacquard_derive::IntoStatic, 34 + Default 35 + )] 36 + #[serde(rename_all = "camelCase")] 37 + pub struct GetTrackShoutsOutput<'a> { 38 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 39 + #[serde(borrow)] 40 + pub shouts: std::option::Option<Vec<jacquard_common::types::value::Data<'a>>>, 41 + } 42 + 43 + ///Response type for 44 + ///app.rocksky.shout.getTrackShouts 45 + pub struct GetTrackShoutsResponse; 46 + impl jacquard_common::xrpc::XrpcResp for GetTrackShoutsResponse { 47 + const NSID: &'static str = "app.rocksky.shout.getTrackShouts"; 48 + const ENCODING: &'static str = "application/json"; 49 + type Output<'de> = GetTrackShoutsOutput<'de>; 50 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 51 + } 52 + 53 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetTrackShouts<'a> { 54 + const NSID: &'static str = "app.rocksky.shout.getTrackShouts"; 55 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 56 + type Response = GetTrackShoutsResponse; 57 + } 58 + 59 + ///Endpoint type for 60 + ///app.rocksky.shout.getTrackShouts 61 + pub struct GetTrackShoutsRequest; 62 + impl jacquard_common::xrpc::XrpcEndpoint for GetTrackShoutsRequest { 63 + const PATH: &'static str = "/xrpc/app.rocksky.shout.getTrackShouts"; 64 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 65 + type Request<'de> = GetTrackShouts<'de>; 66 + type Response = GetTrackShoutsResponse; 67 + }
+83
crates/jacquard-api/src/app_rocksky/shout/remove_shout.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.shout.removeShout 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct RemoveShoutParams<'a> { 21 + #[serde(borrow)] 22 + #[builder(into)] 23 + pub id: jacquard_common::CowStr<'a>, 24 + } 25 + 26 + #[jacquard_derive::lexicon] 27 + #[derive( 28 + serde::Serialize, 29 + serde::Deserialize, 30 + Debug, 31 + Clone, 32 + PartialEq, 33 + Eq, 34 + jacquard_derive::IntoStatic 35 + )] 36 + #[serde(rename_all = "camelCase")] 37 + pub struct RemoveShoutOutput<'a> { 38 + #[serde(flatten)] 39 + #[serde(borrow)] 40 + pub value: crate::app_rocksky::shout::ShoutView<'a>, 41 + } 42 + 43 + /// XRPC request marker type 44 + #[derive( 45 + Debug, 46 + Clone, 47 + Copy, 48 + PartialEq, 49 + Eq, 50 + serde::Serialize, 51 + serde::Deserialize, 52 + jacquard_derive::IntoStatic 53 + )] 54 + pub struct RemoveShout; 55 + ///Response type for 56 + ///app.rocksky.shout.removeShout 57 + pub struct RemoveShoutResponse; 58 + impl jacquard_common::xrpc::XrpcResp for RemoveShoutResponse { 59 + const NSID: &'static str = "app.rocksky.shout.removeShout"; 60 + const ENCODING: &'static str = "application/json"; 61 + type Output<'de> = RemoveShoutOutput<'de>; 62 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 63 + } 64 + 65 + impl jacquard_common::xrpc::XrpcRequest for RemoveShout { 66 + const NSID: &'static str = "app.rocksky.shout.removeShout"; 67 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 68 + "application/json", 69 + ); 70 + type Response = RemoveShoutResponse; 71 + } 72 + 73 + ///Endpoint type for 74 + ///app.rocksky.shout.removeShout 75 + pub struct RemoveShoutRequest; 76 + impl jacquard_common::xrpc::XrpcEndpoint for RemoveShoutRequest { 77 + const PATH: &'static str = "/xrpc/app.rocksky.shout.removeShout"; 78 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 79 + "application/json", 80 + ); 81 + type Request<'de> = RemoveShout; 82 + type Response = RemoveShoutResponse; 83 + }
+74
crates/jacquard-api/src/app_rocksky/shout/reply_shout.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.shout.replyShout 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[jacquard_derive::lexicon] 9 + #[derive( 10 + serde::Serialize, 11 + serde::Deserialize, 12 + Debug, 13 + Clone, 14 + PartialEq, 15 + Eq, 16 + jacquard_derive::IntoStatic, 17 + Default 18 + )] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct ReplyShout<'a> { 21 + /// The content of the reply 22 + #[serde(borrow)] 23 + pub message: jacquard_common::CowStr<'a>, 24 + /// The unique identifier of the shout to reply to 25 + #[serde(borrow)] 26 + pub shout_id: jacquard_common::CowStr<'a>, 27 + } 28 + 29 + #[jacquard_derive::lexicon] 30 + #[derive( 31 + serde::Serialize, 32 + serde::Deserialize, 33 + Debug, 34 + Clone, 35 + PartialEq, 36 + Eq, 37 + jacquard_derive::IntoStatic 38 + )] 39 + #[serde(rename_all = "camelCase")] 40 + pub struct ReplyShoutOutput<'a> { 41 + #[serde(flatten)] 42 + #[serde(borrow)] 43 + pub value: crate::app_rocksky::shout::ShoutView<'a>, 44 + } 45 + 46 + ///Response type for 47 + ///app.rocksky.shout.replyShout 48 + pub struct ReplyShoutResponse; 49 + impl jacquard_common::xrpc::XrpcResp for ReplyShoutResponse { 50 + const NSID: &'static str = "app.rocksky.shout.replyShout"; 51 + const ENCODING: &'static str = "application/json"; 52 + type Output<'de> = ReplyShoutOutput<'de>; 53 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 54 + } 55 + 56 + impl<'a> jacquard_common::xrpc::XrpcRequest for ReplyShout<'a> { 57 + const NSID: &'static str = "app.rocksky.shout.replyShout"; 58 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 59 + "application/json", 60 + ); 61 + type Response = ReplyShoutResponse; 62 + } 63 + 64 + ///Endpoint type for 65 + ///app.rocksky.shout.replyShout 66 + pub struct ReplyShoutRequest; 67 + impl jacquard_common::xrpc::XrpcEndpoint for ReplyShoutRequest { 68 + const PATH: &'static str = "/xrpc/app.rocksky.shout.replyShout"; 69 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 70 + "application/json", 71 + ); 72 + type Request<'de> = ReplyShout<'de>; 73 + type Response = ReplyShoutResponse; 74 + }
+75
crates/jacquard-api/src/app_rocksky/shout/report_shout.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.shout.reportShout 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[jacquard_derive::lexicon] 9 + #[derive( 10 + serde::Serialize, 11 + serde::Deserialize, 12 + Debug, 13 + Clone, 14 + PartialEq, 15 + Eq, 16 + jacquard_derive::IntoStatic, 17 + Default 18 + )] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct ReportShout<'a> { 21 + /// The reason for reporting the shout 22 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 23 + #[serde(borrow)] 24 + pub reason: std::option::Option<jacquard_common::CowStr<'a>>, 25 + /// The unique identifier of the shout to report 26 + #[serde(borrow)] 27 + pub shout_id: jacquard_common::CowStr<'a>, 28 + } 29 + 30 + #[jacquard_derive::lexicon] 31 + #[derive( 32 + serde::Serialize, 33 + serde::Deserialize, 34 + Debug, 35 + Clone, 36 + PartialEq, 37 + Eq, 38 + jacquard_derive::IntoStatic 39 + )] 40 + #[serde(rename_all = "camelCase")] 41 + pub struct ReportShoutOutput<'a> { 42 + #[serde(flatten)] 43 + #[serde(borrow)] 44 + pub value: crate::app_rocksky::shout::ShoutView<'a>, 45 + } 46 + 47 + ///Response type for 48 + ///app.rocksky.shout.reportShout 49 + pub struct ReportShoutResponse; 50 + impl jacquard_common::xrpc::XrpcResp for ReportShoutResponse { 51 + const NSID: &'static str = "app.rocksky.shout.reportShout"; 52 + const ENCODING: &'static str = "application/json"; 53 + type Output<'de> = ReportShoutOutput<'de>; 54 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 55 + } 56 + 57 + impl<'a> jacquard_common::xrpc::XrpcRequest for ReportShout<'a> { 58 + const NSID: &'static str = "app.rocksky.shout.reportShout"; 59 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 60 + "application/json", 61 + ); 62 + type Response = ReportShoutResponse; 63 + } 64 + 65 + ///Endpoint type for 66 + ///app.rocksky.shout.reportShout 67 + pub struct ReportShoutRequest; 68 + impl jacquard_common::xrpc::XrpcEndpoint for ReportShoutRequest { 69 + const PATH: &'static str = "/xrpc/app.rocksky.shout.reportShout"; 70 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 71 + "application/json", 72 + ); 73 + type Request<'de> = ReportShout<'de>; 74 + type Response = ReportShoutResponse; 75 + }
+155
crates/jacquard-api/src/app_rocksky/shout.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.shout.defs 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + pub mod create_shout; 9 + pub mod get_album_shouts; 10 + pub mod get_artist_shouts; 11 + pub mod get_profile_shouts; 12 + pub mod get_shout_replies; 13 + pub mod get_track_shouts; 14 + pub mod remove_shout; 15 + pub mod reply_shout; 16 + pub mod report_shout; 17 + 18 + /// A declaration of a shout. 19 + #[jacquard_derive::lexicon] 20 + #[derive( 21 + serde::Serialize, 22 + serde::Deserialize, 23 + Debug, 24 + Clone, 25 + PartialEq, 26 + Eq, 27 + jacquard_derive::IntoStatic, 28 + bon::Builder 29 + )] 30 + #[serde(rename_all = "camelCase")] 31 + pub struct Shout<'a> { 32 + /// The date when the shout was created. 33 + pub created_at: jacquard_common::types::string::Datetime, 34 + /// The message of the shout. 35 + #[serde(borrow)] 36 + #[builder(into)] 37 + pub message: jacquard_common::CowStr<'a>, 38 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 39 + #[builder(into)] 40 + #[serde(borrow)] 41 + pub parent: Option<crate::com_atproto::repo::strong_ref::StrongRef<'a>>, 42 + #[serde(borrow)] 43 + pub subject: crate::com_atproto::repo::strong_ref::StrongRef<'a>, 44 + } 45 + 46 + /// Typed wrapper for GetRecord response with this collection's record type. 47 + #[derive( 48 + serde::Serialize, 49 + serde::Deserialize, 50 + Debug, 51 + Clone, 52 + PartialEq, 53 + Eq, 54 + jacquard_derive::IntoStatic 55 + )] 56 + #[serde(rename_all = "camelCase")] 57 + pub struct ShoutGetRecordOutput<'a> { 58 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 59 + #[serde(borrow)] 60 + pub cid: std::option::Option<jacquard_common::types::string::Cid<'a>>, 61 + #[serde(borrow)] 62 + pub uri: jacquard_common::types::string::AtUri<'a>, 63 + #[serde(borrow)] 64 + pub value: Shout<'a>, 65 + } 66 + 67 + /// Marker type for deserializing records from this collection. 68 + pub struct ShoutRecord; 69 + impl jacquard_common::xrpc::XrpcResp for ShoutRecord { 70 + const NSID: &'static str = "app.rocksky.shout"; 71 + const ENCODING: &'static str = "application/json"; 72 + type Output<'de> = ShoutGetRecordOutput<'de>; 73 + type Err<'de> = jacquard_common::types::collection::RecordError<'de>; 74 + } 75 + 76 + impl jacquard_common::types::collection::Collection for Shout<'_> { 77 + const NSID: &'static str = "app.rocksky.shout"; 78 + type Record = ShoutRecord; 79 + } 80 + 81 + impl From<ShoutGetRecordOutput<'_>> for Shout<'_> { 82 + fn from(output: ShoutGetRecordOutput<'_>) -> Self { 83 + use jacquard_common::IntoStatic; 84 + output.value.into_static() 85 + } 86 + } 87 + 88 + #[jacquard_derive::lexicon] 89 + #[derive( 90 + serde::Serialize, 91 + serde::Deserialize, 92 + Debug, 93 + Clone, 94 + PartialEq, 95 + Eq, 96 + jacquard_derive::IntoStatic, 97 + Default 98 + )] 99 + #[serde(rename_all = "camelCase")] 100 + pub struct Author<'a> { 101 + /// The URL of the author's avatar image. 102 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 103 + #[serde(borrow)] 104 + pub avatar: std::option::Option<jacquard_common::types::string::Uri<'a>>, 105 + /// The decentralized identifier (DID) of the author. 106 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 107 + #[serde(borrow)] 108 + pub did: std::option::Option<jacquard_common::types::ident::AtIdentifier<'a>>, 109 + /// The display name of the author. 110 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 111 + #[serde(borrow)] 112 + pub display_name: std::option::Option<jacquard_common::CowStr<'a>>, 113 + /// The handle of the author. 114 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 115 + #[serde(borrow)] 116 + pub handle: std::option::Option<jacquard_common::types::ident::AtIdentifier<'a>>, 117 + /// The unique identifier of the author. 118 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 119 + #[serde(borrow)] 120 + pub id: std::option::Option<jacquard_common::CowStr<'a>>, 121 + } 122 + 123 + #[jacquard_derive::lexicon] 124 + #[derive( 125 + serde::Serialize, 126 + serde::Deserialize, 127 + Debug, 128 + Clone, 129 + PartialEq, 130 + Eq, 131 + jacquard_derive::IntoStatic, 132 + Default 133 + )] 134 + #[serde(rename_all = "camelCase")] 135 + pub struct ShoutView<'a> { 136 + /// The author of the shout. 137 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 138 + #[serde(borrow)] 139 + pub author: std::option::Option<crate::app_rocksky::shout::Author<'a>>, 140 + /// The date and time when the shout was created. 141 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 142 + pub created_at: std::option::Option<jacquard_common::types::string::Datetime>, 143 + /// The unique identifier of the shout. 144 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 145 + #[serde(borrow)] 146 + pub id: std::option::Option<jacquard_common::CowStr<'a>>, 147 + /// The content of the shout. 148 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 149 + #[serde(borrow)] 150 + pub message: std::option::Option<jacquard_common::CowStr<'a>>, 151 + /// The ID of the parent shout if this is a reply, otherwise null. 152 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 153 + #[serde(borrow)] 154 + pub parent: std::option::Option<jacquard_common::CowStr<'a>>, 155 + }
+108
crates/jacquard-api/src/app_rocksky/song/create_song.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.song.createSong 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[jacquard_derive::lexicon] 9 + #[derive( 10 + serde::Serialize, 11 + serde::Deserialize, 12 + Debug, 13 + Clone, 14 + PartialEq, 15 + Eq, 16 + jacquard_derive::IntoStatic, 17 + Default 18 + )] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct CreateSong<'a> { 21 + /// The album of the song, if applicable 22 + #[serde(borrow)] 23 + pub album: jacquard_common::CowStr<'a>, 24 + /// The URL of the album art for the song 25 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 26 + #[serde(borrow)] 27 + pub album_art: std::option::Option<jacquard_common::types::string::Uri<'a>>, 28 + /// The album artist of the song, if different from the main artist 29 + #[serde(borrow)] 30 + pub album_artist: jacquard_common::CowStr<'a>, 31 + /// The artist of the song 32 + #[serde(borrow)] 33 + pub artist: jacquard_common::CowStr<'a>, 34 + /// The disc number of the song in the album, if applicable 35 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 36 + pub disc_number: std::option::Option<i64>, 37 + /// The duration of the song in seconds 38 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 39 + pub duration: std::option::Option<i64>, 40 + /// The lyrics of the song, if available 41 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 42 + #[serde(borrow)] 43 + pub lyrics: std::option::Option<jacquard_common::CowStr<'a>>, 44 + /// The MusicBrainz ID of the song, if available 45 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 46 + #[serde(borrow)] 47 + pub mb_id: std::option::Option<jacquard_common::CowStr<'a>>, 48 + /// The release date of the song, formatted as YYYY-MM-DD 49 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 50 + #[serde(borrow)] 51 + pub release_date: std::option::Option<jacquard_common::CowStr<'a>>, 52 + /// The title of the song 53 + #[serde(borrow)] 54 + pub title: jacquard_common::CowStr<'a>, 55 + /// The track number of the song in the album, if applicable 56 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 57 + pub track_number: std::option::Option<i64>, 58 + /// The year the song was released 59 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 60 + pub year: std::option::Option<i64>, 61 + } 62 + 63 + #[jacquard_derive::lexicon] 64 + #[derive( 65 + serde::Serialize, 66 + serde::Deserialize, 67 + Debug, 68 + Clone, 69 + PartialEq, 70 + Eq, 71 + jacquard_derive::IntoStatic 72 + )] 73 + #[serde(rename_all = "camelCase")] 74 + pub struct CreateSongOutput<'a> { 75 + #[serde(flatten)] 76 + #[serde(borrow)] 77 + pub value: crate::app_rocksky::song::SongViewDetailed<'a>, 78 + } 79 + 80 + ///Response type for 81 + ///app.rocksky.song.createSong 82 + pub struct CreateSongResponse; 83 + impl jacquard_common::xrpc::XrpcResp for CreateSongResponse { 84 + const NSID: &'static str = "app.rocksky.song.createSong"; 85 + const ENCODING: &'static str = "application/json"; 86 + type Output<'de> = CreateSongOutput<'de>; 87 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 88 + } 89 + 90 + impl<'a> jacquard_common::xrpc::XrpcRequest for CreateSong<'a> { 91 + const NSID: &'static str = "app.rocksky.song.createSong"; 92 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 93 + "application/json", 94 + ); 95 + type Response = CreateSongResponse; 96 + } 97 + 98 + ///Endpoint type for 99 + ///app.rocksky.song.createSong 100 + pub struct CreateSongRequest; 101 + impl jacquard_common::xrpc::XrpcEndpoint for CreateSongRequest { 102 + const PATH: &'static str = "/xrpc/app.rocksky.song.createSong"; 103 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 104 + "application/json", 105 + ); 106 + type Request<'de> = CreateSong<'de>; 107 + type Response = CreateSongResponse; 108 + }
+66
crates/jacquard-api/src/app_rocksky/song/get_song.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.song.getSong 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetSong<'a> { 21 + #[serde(borrow)] 22 + pub uri: jacquard_common::types::string::AtUri<'a>, 23 + } 24 + 25 + #[jacquard_derive::lexicon] 26 + #[derive( 27 + serde::Serialize, 28 + serde::Deserialize, 29 + Debug, 30 + Clone, 31 + PartialEq, 32 + Eq, 33 + jacquard_derive::IntoStatic 34 + )] 35 + #[serde(rename_all = "camelCase")] 36 + pub struct GetSongOutput<'a> { 37 + #[serde(flatten)] 38 + #[serde(borrow)] 39 + pub value: crate::app_rocksky::song::SongViewDetailed<'a>, 40 + } 41 + 42 + ///Response type for 43 + ///app.rocksky.song.getSong 44 + pub struct GetSongResponse; 45 + impl jacquard_common::xrpc::XrpcResp for GetSongResponse { 46 + const NSID: &'static str = "app.rocksky.song.getSong"; 47 + const ENCODING: &'static str = "application/json"; 48 + type Output<'de> = GetSongOutput<'de>; 49 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 50 + } 51 + 52 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetSong<'a> { 53 + const NSID: &'static str = "app.rocksky.song.getSong"; 54 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 55 + type Response = GetSongResponse; 56 + } 57 + 58 + ///Endpoint type for 59 + ///app.rocksky.song.getSong 60 + pub struct GetSongRequest; 61 + impl jacquard_common::xrpc::XrpcEndpoint for GetSongRequest { 62 + const PATH: &'static str = "/xrpc/app.rocksky.song.getSong"; 63 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 64 + type Request<'de> = GetSong<'de>; 65 + type Response = GetSongResponse; 66 + }
+71
crates/jacquard-api/src/app_rocksky/song/get_songs.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.song.getSongs 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetSongs { 21 + ///(min: 1) 22 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 23 + pub limit: std::option::Option<i64>, 24 + ///(min: 0) 25 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 26 + pub offset: std::option::Option<i64>, 27 + } 28 + 29 + #[jacquard_derive::lexicon] 30 + #[derive( 31 + serde::Serialize, 32 + serde::Deserialize, 33 + Debug, 34 + Clone, 35 + PartialEq, 36 + Eq, 37 + jacquard_derive::IntoStatic, 38 + Default 39 + )] 40 + #[serde(rename_all = "camelCase")] 41 + pub struct GetSongsOutput<'a> { 42 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 43 + #[serde(borrow)] 44 + pub songs: std::option::Option<Vec<crate::app_rocksky::song::SongViewBasic<'a>>>, 45 + } 46 + 47 + ///Response type for 48 + ///app.rocksky.song.getSongs 49 + pub struct GetSongsResponse; 50 + impl jacquard_common::xrpc::XrpcResp for GetSongsResponse { 51 + const NSID: &'static str = "app.rocksky.song.getSongs"; 52 + const ENCODING: &'static str = "application/json"; 53 + type Output<'de> = GetSongsOutput<'de>; 54 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 55 + } 56 + 57 + impl jacquard_common::xrpc::XrpcRequest for GetSongs { 58 + const NSID: &'static str = "app.rocksky.song.getSongs"; 59 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 60 + type Response = GetSongsResponse; 61 + } 62 + 63 + ///Endpoint type for 64 + ///app.rocksky.song.getSongs 65 + pub struct GetSongsRequest; 66 + impl jacquard_common::xrpc::XrpcEndpoint for GetSongsRequest { 67 + const PATH: &'static str = "/xrpc/app.rocksky.song.getSongs"; 68 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 69 + type Request<'de> = GetSongs; 70 + type Response = GetSongsResponse; 71 + }
+315
crates/jacquard-api/src/app_rocksky/song.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.song.defs 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + pub mod create_song; 9 + pub mod get_song; 10 + pub mod get_songs; 11 + 12 + /// A declaration of a song. 13 + #[jacquard_derive::lexicon] 14 + #[derive( 15 + serde::Serialize, 16 + serde::Deserialize, 17 + Debug, 18 + Clone, 19 + PartialEq, 20 + Eq, 21 + jacquard_derive::IntoStatic, 22 + bon::Builder 23 + )] 24 + #[serde(rename_all = "camelCase")] 25 + pub struct Song<'a> { 26 + /// The album of the song. 27 + #[serde(borrow)] 28 + #[builder(into)] 29 + pub album: jacquard_common::CowStr<'a>, 30 + /// The album art of the song. 31 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 32 + #[builder(into)] 33 + #[serde(borrow)] 34 + pub album_art: Option<jacquard_common::types::blob::Blob<'a>>, 35 + /// The album artist of the song. 36 + #[serde(borrow)] 37 + #[builder(into)] 38 + pub album_artist: jacquard_common::CowStr<'a>, 39 + /// The Apple Music link of the song. 40 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 41 + #[builder(into)] 42 + #[serde(borrow)] 43 + pub apple_music_link: Option<jacquard_common::types::string::Uri<'a>>, 44 + /// The artist of the song. 45 + #[serde(borrow)] 46 + #[builder(into)] 47 + pub artist: jacquard_common::CowStr<'a>, 48 + /// The composer of the song. 49 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 50 + #[builder(into)] 51 + #[serde(borrow)] 52 + pub composer: Option<jacquard_common::CowStr<'a>>, 53 + /// The copyright message of the song. 54 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 55 + #[builder(into)] 56 + #[serde(borrow)] 57 + pub copyright_message: Option<jacquard_common::CowStr<'a>>, 58 + /// The date when the song was created. 59 + pub created_at: jacquard_common::types::string::Datetime, 60 + /// The disc number of the song in the album. 61 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 62 + #[builder(into)] 63 + pub disc_number: Option<i64>, 64 + /// The duration of the song in seconds. 65 + pub duration: i64, 66 + /// The genre of the song. 67 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 68 + #[builder(into)] 69 + #[serde(borrow)] 70 + pub genre: Option<jacquard_common::CowStr<'a>>, 71 + /// The label of the song. 72 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 73 + #[builder(into)] 74 + #[serde(borrow)] 75 + pub label: Option<jacquard_common::CowStr<'a>>, 76 + /// The lyrics of the song. 77 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 78 + #[builder(into)] 79 + #[serde(borrow)] 80 + pub lyrics: Option<jacquard_common::CowStr<'a>>, 81 + /// The MusicBrainz ID of the song. 82 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 83 + #[builder(into)] 84 + #[serde(borrow)] 85 + pub mbid: Option<jacquard_common::CowStr<'a>>, 86 + /// The release date of the song. 87 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 88 + #[builder(into)] 89 + pub release_date: Option<jacquard_common::types::string::Datetime>, 90 + /// The Spotify link of the song. 91 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 92 + #[builder(into)] 93 + #[serde(borrow)] 94 + pub spotify_link: Option<jacquard_common::types::string::Uri<'a>>, 95 + /// The tags of the song. 96 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 97 + #[builder(into)] 98 + #[serde(borrow)] 99 + pub tags: Option<Vec<jacquard_common::CowStr<'a>>>, 100 + /// The Tidal link of the song. 101 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 102 + #[builder(into)] 103 + #[serde(borrow)] 104 + pub tidal_link: Option<jacquard_common::types::string::Uri<'a>>, 105 + /// The title of the song. 106 + #[serde(borrow)] 107 + #[builder(into)] 108 + pub title: jacquard_common::CowStr<'a>, 109 + /// The track number of the song in the album. 110 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 111 + #[builder(into)] 112 + pub track_number: Option<i64>, 113 + /// Informations about the song 114 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 115 + #[builder(into)] 116 + #[serde(borrow)] 117 + pub wiki: Option<jacquard_common::CowStr<'a>>, 118 + /// The year the song was released. 119 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 120 + #[builder(into)] 121 + pub year: Option<i64>, 122 + /// The YouTube link of the song. 123 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 124 + #[builder(into)] 125 + #[serde(borrow)] 126 + pub youtube_link: Option<jacquard_common::types::string::Uri<'a>>, 127 + } 128 + 129 + /// Typed wrapper for GetRecord response with this collection's record type. 130 + #[derive( 131 + serde::Serialize, 132 + serde::Deserialize, 133 + Debug, 134 + Clone, 135 + PartialEq, 136 + Eq, 137 + jacquard_derive::IntoStatic 138 + )] 139 + #[serde(rename_all = "camelCase")] 140 + pub struct SongGetRecordOutput<'a> { 141 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 142 + #[serde(borrow)] 143 + pub cid: std::option::Option<jacquard_common::types::string::Cid<'a>>, 144 + #[serde(borrow)] 145 + pub uri: jacquard_common::types::string::AtUri<'a>, 146 + #[serde(borrow)] 147 + pub value: Song<'a>, 148 + } 149 + 150 + /// Marker type for deserializing records from this collection. 151 + pub struct SongRecord; 152 + impl jacquard_common::xrpc::XrpcResp for SongRecord { 153 + const NSID: &'static str = "app.rocksky.song"; 154 + const ENCODING: &'static str = "application/json"; 155 + type Output<'de> = SongGetRecordOutput<'de>; 156 + type Err<'de> = jacquard_common::types::collection::RecordError<'de>; 157 + } 158 + 159 + impl jacquard_common::types::collection::Collection for Song<'_> { 160 + const NSID: &'static str = "app.rocksky.song"; 161 + type Record = SongRecord; 162 + } 163 + 164 + impl From<SongGetRecordOutput<'_>> for Song<'_> { 165 + fn from(output: SongGetRecordOutput<'_>) -> Self { 166 + use jacquard_common::IntoStatic; 167 + output.value.into_static() 168 + } 169 + } 170 + 171 + #[jacquard_derive::lexicon] 172 + #[derive( 173 + serde::Serialize, 174 + serde::Deserialize, 175 + Debug, 176 + Clone, 177 + PartialEq, 178 + Eq, 179 + jacquard_derive::IntoStatic, 180 + Default 181 + )] 182 + #[serde(rename_all = "camelCase")] 183 + pub struct SongViewBasic<'a> { 184 + /// The album of the song. 185 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 186 + #[serde(borrow)] 187 + pub album: std::option::Option<jacquard_common::CowStr<'a>>, 188 + /// The URL of the album art image. 189 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 190 + #[serde(borrow)] 191 + pub album_art: std::option::Option<jacquard_common::types::string::Uri<'a>>, 192 + /// The artist of the album the song belongs to. 193 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 194 + #[serde(borrow)] 195 + pub album_artist: std::option::Option<jacquard_common::CowStr<'a>>, 196 + /// The URI of the album the song belongs to. 197 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 198 + #[serde(borrow)] 199 + pub album_uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 200 + /// The artist of the song. 201 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 202 + #[serde(borrow)] 203 + pub artist: std::option::Option<jacquard_common::CowStr<'a>>, 204 + /// The URI of the artist of the song. 205 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 206 + #[serde(borrow)] 207 + pub artist_uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 208 + /// The timestamp when the song was created. 209 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 210 + pub created_at: std::option::Option<jacquard_common::types::string::Datetime>, 211 + /// The disc number of the song in the album. 212 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 213 + pub disc_number: std::option::Option<i64>, 214 + /// The duration of the song in milliseconds. 215 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 216 + pub duration: std::option::Option<i64>, 217 + /// The unique identifier of the song. 218 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 219 + #[serde(borrow)] 220 + pub id: std::option::Option<jacquard_common::CowStr<'a>>, 221 + /// The number of times the song has been played. 222 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 223 + pub play_count: std::option::Option<i64>, 224 + /// The SHA256 hash of the song. 225 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 226 + #[serde(borrow)] 227 + pub sha256: std::option::Option<jacquard_common::CowStr<'a>>, 228 + /// The title of the song. 229 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 230 + #[serde(borrow)] 231 + pub title: std::option::Option<jacquard_common::CowStr<'a>>, 232 + /// The track number of the song in the album. 233 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 234 + pub track_number: std::option::Option<i64>, 235 + /// The number of unique listeners who have played the song. 236 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 237 + pub unique_listeners: std::option::Option<i64>, 238 + /// The URI of the song. 239 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 240 + #[serde(borrow)] 241 + pub uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 242 + } 243 + 244 + #[jacquard_derive::lexicon] 245 + #[derive( 246 + serde::Serialize, 247 + serde::Deserialize, 248 + Debug, 249 + Clone, 250 + PartialEq, 251 + Eq, 252 + jacquard_derive::IntoStatic, 253 + Default 254 + )] 255 + #[serde(rename_all = "camelCase")] 256 + pub struct SongViewDetailed<'a> { 257 + /// The album of the song. 258 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 259 + #[serde(borrow)] 260 + pub album: std::option::Option<jacquard_common::CowStr<'a>>, 261 + /// The URL of the album art image. 262 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 263 + #[serde(borrow)] 264 + pub album_art: std::option::Option<jacquard_common::types::string::Uri<'a>>, 265 + /// The artist of the album the song belongs to. 266 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 267 + #[serde(borrow)] 268 + pub album_artist: std::option::Option<jacquard_common::CowStr<'a>>, 269 + /// The URI of the album the song belongs to. 270 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 271 + #[serde(borrow)] 272 + pub album_uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 273 + /// The artist of the song. 274 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 275 + #[serde(borrow)] 276 + pub artist: std::option::Option<jacquard_common::CowStr<'a>>, 277 + /// The URI of the artist of the song. 278 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 279 + #[serde(borrow)] 280 + pub artist_uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 281 + /// The timestamp when the song was created. 282 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 283 + pub created_at: std::option::Option<jacquard_common::types::string::Datetime>, 284 + /// The disc number of the song in the album. 285 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 286 + pub disc_number: std::option::Option<i64>, 287 + /// The duration of the song in milliseconds. 288 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 289 + pub duration: std::option::Option<i64>, 290 + /// The unique identifier of the song. 291 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 292 + #[serde(borrow)] 293 + pub id: std::option::Option<jacquard_common::CowStr<'a>>, 294 + /// The number of times the song has been played. 295 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 296 + pub play_count: std::option::Option<i64>, 297 + /// The SHA256 hash of the song. 298 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 299 + #[serde(borrow)] 300 + pub sha256: std::option::Option<jacquard_common::CowStr<'a>>, 301 + /// The title of the song. 302 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 303 + #[serde(borrow)] 304 + pub title: std::option::Option<jacquard_common::CowStr<'a>>, 305 + /// The track number of the song in the album. 306 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 307 + pub track_number: std::option::Option<i64>, 308 + /// The number of unique listeners who have played the song. 309 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 310 + pub unique_listeners: std::option::Option<i64>, 311 + /// The URI of the song. 312 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 313 + #[serde(borrow)] 314 + pub uri: std::option::Option<jacquard_common::types::string::AtUri<'a>>, 315 + }
+67
crates/jacquard-api/src/app_rocksky/spotify/get_currently_playing.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.spotify.getCurrentlyPlaying 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetCurrentlyPlaying<'a> { 21 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 22 + #[serde(borrow)] 23 + pub actor: std::option::Option<jacquard_common::types::ident::AtIdentifier<'a>>, 24 + } 25 + 26 + #[jacquard_derive::lexicon] 27 + #[derive( 28 + serde::Serialize, 29 + serde::Deserialize, 30 + Debug, 31 + Clone, 32 + PartialEq, 33 + Eq, 34 + jacquard_derive::IntoStatic 35 + )] 36 + #[serde(rename_all = "camelCase")] 37 + pub struct GetCurrentlyPlayingOutput<'a> { 38 + #[serde(flatten)] 39 + #[serde(borrow)] 40 + pub value: crate::app_rocksky::player::CurrentlyPlayingViewDetailed<'a>, 41 + } 42 + 43 + ///Response type for 44 + ///app.rocksky.spotify.getCurrentlyPlaying 45 + pub struct GetCurrentlyPlayingResponse; 46 + impl jacquard_common::xrpc::XrpcResp for GetCurrentlyPlayingResponse { 47 + const NSID: &'static str = "app.rocksky.spotify.getCurrentlyPlaying"; 48 + const ENCODING: &'static str = "application/json"; 49 + type Output<'de> = GetCurrentlyPlayingOutput<'de>; 50 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 51 + } 52 + 53 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetCurrentlyPlaying<'a> { 54 + const NSID: &'static str = "app.rocksky.spotify.getCurrentlyPlaying"; 55 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 56 + type Response = GetCurrentlyPlayingResponse; 57 + } 58 + 59 + ///Endpoint type for 60 + ///app.rocksky.spotify.getCurrentlyPlaying 61 + pub struct GetCurrentlyPlayingRequest; 62 + impl jacquard_common::xrpc::XrpcEndpoint for GetCurrentlyPlayingRequest { 63 + const PATH: &'static str = "/xrpc/app.rocksky.spotify.getCurrentlyPlaying"; 64 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 65 + type Request<'de> = GetCurrentlyPlaying<'de>; 66 + type Response = GetCurrentlyPlayingResponse; 67 + }
+48
crates/jacquard-api/src/app_rocksky/spotify/next.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.spotify.next 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + /// XRPC request marker type 9 + #[derive( 10 + Debug, 11 + Clone, 12 + Copy, 13 + PartialEq, 14 + Eq, 15 + serde::Serialize, 16 + serde::Deserialize, 17 + jacquard_derive::IntoStatic 18 + )] 19 + pub struct Next; 20 + ///Response type for 21 + ///app.rocksky.spotify.next 22 + pub struct NextResponse; 23 + impl jacquard_common::xrpc::XrpcResp for NextResponse { 24 + const NSID: &'static str = "app.rocksky.spotify.next"; 25 + const ENCODING: &'static str = "application/json"; 26 + type Output<'de> = (); 27 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 28 + } 29 + 30 + impl jacquard_common::xrpc::XrpcRequest for Next { 31 + const NSID: &'static str = "app.rocksky.spotify.next"; 32 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 33 + "application/json", 34 + ); 35 + type Response = NextResponse; 36 + } 37 + 38 + ///Endpoint type for 39 + ///app.rocksky.spotify.next 40 + pub struct NextRequest; 41 + impl jacquard_common::xrpc::XrpcEndpoint for NextRequest { 42 + const PATH: &'static str = "/xrpc/app.rocksky.spotify.next"; 43 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 44 + "application/json", 45 + ); 46 + type Request<'de> = Next; 47 + type Response = NextResponse; 48 + }
+48
crates/jacquard-api/src/app_rocksky/spotify/pause.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.spotify.pause 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + /// XRPC request marker type 9 + #[derive( 10 + Debug, 11 + Clone, 12 + Copy, 13 + PartialEq, 14 + Eq, 15 + serde::Serialize, 16 + serde::Deserialize, 17 + jacquard_derive::IntoStatic 18 + )] 19 + pub struct Pause; 20 + ///Response type for 21 + ///app.rocksky.spotify.pause 22 + pub struct PauseResponse; 23 + impl jacquard_common::xrpc::XrpcResp for PauseResponse { 24 + const NSID: &'static str = "app.rocksky.spotify.pause"; 25 + const ENCODING: &'static str = "application/json"; 26 + type Output<'de> = (); 27 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 28 + } 29 + 30 + impl jacquard_common::xrpc::XrpcRequest for Pause { 31 + const NSID: &'static str = "app.rocksky.spotify.pause"; 32 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 33 + "application/json", 34 + ); 35 + type Response = PauseResponse; 36 + } 37 + 38 + ///Endpoint type for 39 + ///app.rocksky.spotify.pause 40 + pub struct PauseRequest; 41 + impl jacquard_common::xrpc::XrpcEndpoint for PauseRequest { 42 + const PATH: &'static str = "/xrpc/app.rocksky.spotify.pause"; 43 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 44 + "application/json", 45 + ); 46 + type Request<'de> = Pause; 47 + type Response = PauseResponse; 48 + }
+48
crates/jacquard-api/src/app_rocksky/spotify/play.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.spotify.play 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + /// XRPC request marker type 9 + #[derive( 10 + Debug, 11 + Clone, 12 + Copy, 13 + PartialEq, 14 + Eq, 15 + serde::Serialize, 16 + serde::Deserialize, 17 + jacquard_derive::IntoStatic 18 + )] 19 + pub struct Play; 20 + ///Response type for 21 + ///app.rocksky.spotify.play 22 + pub struct PlayResponse; 23 + impl jacquard_common::xrpc::XrpcResp for PlayResponse { 24 + const NSID: &'static str = "app.rocksky.spotify.play"; 25 + const ENCODING: &'static str = "application/json"; 26 + type Output<'de> = (); 27 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 28 + } 29 + 30 + impl jacquard_common::xrpc::XrpcRequest for Play { 31 + const NSID: &'static str = "app.rocksky.spotify.play"; 32 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 33 + "application/json", 34 + ); 35 + type Response = PlayResponse; 36 + } 37 + 38 + ///Endpoint type for 39 + ///app.rocksky.spotify.play 40 + pub struct PlayRequest; 41 + impl jacquard_common::xrpc::XrpcEndpoint for PlayRequest { 42 + const PATH: &'static str = "/xrpc/app.rocksky.spotify.play"; 43 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 44 + "application/json", 45 + ); 46 + type Request<'de> = Play; 47 + type Response = PlayResponse; 48 + }
+48
crates/jacquard-api/src/app_rocksky/spotify/previous.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.spotify.previous 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + /// XRPC request marker type 9 + #[derive( 10 + Debug, 11 + Clone, 12 + Copy, 13 + PartialEq, 14 + Eq, 15 + serde::Serialize, 16 + serde::Deserialize, 17 + jacquard_derive::IntoStatic 18 + )] 19 + pub struct Previous; 20 + ///Response type for 21 + ///app.rocksky.spotify.previous 22 + pub struct PreviousResponse; 23 + impl jacquard_common::xrpc::XrpcResp for PreviousResponse { 24 + const NSID: &'static str = "app.rocksky.spotify.previous"; 25 + const ENCODING: &'static str = "application/json"; 26 + type Output<'de> = (); 27 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 28 + } 29 + 30 + impl jacquard_common::xrpc::XrpcRequest for Previous { 31 + const NSID: &'static str = "app.rocksky.spotify.previous"; 32 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 33 + "application/json", 34 + ); 35 + type Response = PreviousResponse; 36 + } 37 + 38 + ///Endpoint type for 39 + ///app.rocksky.spotify.previous 40 + pub struct PreviousRequest; 41 + impl jacquard_common::xrpc::XrpcEndpoint for PreviousRequest { 42 + const PATH: &'static str = "/xrpc/app.rocksky.spotify.previous"; 43 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 44 + "application/json", 45 + ); 46 + type Request<'de> = Previous; 47 + type Response = PreviousResponse; 48 + }
+64
crates/jacquard-api/src/app_rocksky/spotify/seek.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.spotify.seek 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct SeekParams { 21 + pub position: i64, 22 + } 23 + 24 + /// XRPC request marker type 25 + #[derive( 26 + Debug, 27 + Clone, 28 + Copy, 29 + PartialEq, 30 + Eq, 31 + serde::Serialize, 32 + serde::Deserialize, 33 + jacquard_derive::IntoStatic 34 + )] 35 + pub struct Seek; 36 + ///Response type for 37 + ///app.rocksky.spotify.seek 38 + pub struct SeekResponse; 39 + impl jacquard_common::xrpc::XrpcResp for SeekResponse { 40 + const NSID: &'static str = "app.rocksky.spotify.seek"; 41 + const ENCODING: &'static str = "application/json"; 42 + type Output<'de> = (); 43 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 44 + } 45 + 46 + impl jacquard_common::xrpc::XrpcRequest for Seek { 47 + const NSID: &'static str = "app.rocksky.spotify.seek"; 48 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 49 + "application/json", 50 + ); 51 + type Response = SeekResponse; 52 + } 53 + 54 + ///Endpoint type for 55 + ///app.rocksky.spotify.seek 56 + pub struct SeekRequest; 57 + impl jacquard_common::xrpc::XrpcEndpoint for SeekRequest { 58 + const PATH: &'static str = "/xrpc/app.rocksky.spotify.seek"; 59 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure( 60 + "application/json", 61 + ); 62 + type Request<'de> = Seek; 63 + type Response = SeekResponse; 64 + }
+51
crates/jacquard-api/src/app_rocksky/spotify.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.spotify.defs 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + pub mod get_currently_playing; 9 + pub mod next; 10 + pub mod pause; 11 + pub mod play; 12 + pub mod previous; 13 + pub mod seek; 14 + 15 + #[jacquard_derive::lexicon] 16 + #[derive( 17 + serde::Serialize, 18 + serde::Deserialize, 19 + Debug, 20 + Clone, 21 + PartialEq, 22 + Eq, 23 + jacquard_derive::IntoStatic, 24 + Default 25 + )] 26 + #[serde(rename_all = "camelCase")] 27 + pub struct SpotifyTrackView<'a> { 28 + /// The name of the album. 29 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 30 + #[serde(borrow)] 31 + pub album: std::option::Option<jacquard_common::CowStr<'a>>, 32 + /// The name of the artist. 33 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 34 + #[serde(borrow)] 35 + pub artist: std::option::Option<jacquard_common::CowStr<'a>>, 36 + /// The duration of the track in milliseconds. 37 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 38 + pub duration: std::option::Option<i64>, 39 + /// The unique identifier of the Spotify track. 40 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 41 + #[serde(borrow)] 42 + pub id: std::option::Option<jacquard_common::CowStr<'a>>, 43 + /// The name of the track. 44 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 45 + #[serde(borrow)] 46 + pub name: std::option::Option<jacquard_common::CowStr<'a>>, 47 + /// A URL to a preview of the track. 48 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 49 + #[serde(borrow)] 50 + pub preview_url: std::option::Option<jacquard_common::CowStr<'a>>, 51 + }
+66
crates/jacquard-api/src/app_rocksky/stats/get_stats.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.stats.getStats 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + #[derive( 9 + serde::Serialize, 10 + serde::Deserialize, 11 + Debug, 12 + Clone, 13 + PartialEq, 14 + Eq, 15 + bon::Builder, 16 + jacquard_derive::IntoStatic 17 + )] 18 + #[builder(start_fn = new)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct GetStats<'a> { 21 + #[serde(borrow)] 22 + pub did: jacquard_common::types::ident::AtIdentifier<'a>, 23 + } 24 + 25 + #[jacquard_derive::lexicon] 26 + #[derive( 27 + serde::Serialize, 28 + serde::Deserialize, 29 + Debug, 30 + Clone, 31 + PartialEq, 32 + Eq, 33 + jacquard_derive::IntoStatic 34 + )] 35 + #[serde(rename_all = "camelCase")] 36 + pub struct GetStatsOutput<'a> { 37 + #[serde(flatten)] 38 + #[serde(borrow)] 39 + pub value: crate::app_rocksky::stats::StatsView<'a>, 40 + } 41 + 42 + ///Response type for 43 + ///app.rocksky.stats.getStats 44 + pub struct GetStatsResponse; 45 + impl jacquard_common::xrpc::XrpcResp for GetStatsResponse { 46 + const NSID: &'static str = "app.rocksky.stats.getStats"; 47 + const ENCODING: &'static str = "application/json"; 48 + type Output<'de> = GetStatsOutput<'de>; 49 + type Err<'de> = jacquard_common::xrpc::GenericError<'de>; 50 + } 51 + 52 + impl<'a> jacquard_common::xrpc::XrpcRequest for GetStats<'a> { 53 + const NSID: &'static str = "app.rocksky.stats.getStats"; 54 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 55 + type Response = GetStatsResponse; 56 + } 57 + 58 + ///Endpoint type for 59 + ///app.rocksky.stats.getStats 60 + pub struct GetStatsRequest; 61 + impl jacquard_common::xrpc::XrpcEndpoint for GetStatsRequest { 62 + const PATH: &'static str = "/xrpc/app.rocksky.stats.getStats"; 63 + const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Query; 64 + type Request<'de> = GetStats<'de>; 65 + type Response = GetStatsResponse; 66 + }
+38
crates/jacquard-api/src/app_rocksky/stats.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: app.rocksky.stats.defs 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + pub mod get_stats; 9 + 10 + #[jacquard_derive::lexicon] 11 + #[derive( 12 + serde::Serialize, 13 + serde::Deserialize, 14 + Debug, 15 + Clone, 16 + PartialEq, 17 + Eq, 18 + jacquard_derive::IntoStatic, 19 + Default 20 + )] 21 + #[serde(rename_all = "camelCase")] 22 + pub struct StatsView<'a> { 23 + /// The total number of unique albums scrobbled. 24 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 25 + pub albums: std::option::Option<i64>, 26 + /// The total number of unique artists scrobbled. 27 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 28 + pub artists: std::option::Option<i64>, 29 + /// The total number of tracks marked as loved. 30 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 31 + pub loved_tracks: std::option::Option<i64>, 32 + /// The total number of scrobbles. 33 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 34 + pub scrobbles: std::option::Option<i64>, 35 + /// The total number of unique tracks scrobbled. 36 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 37 + pub tracks: std::option::Option<i64>, 38 + }
+22
crates/jacquard-api/src/app_rocksky 2.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // This file was automatically generated from Lexicon schemas. 4 + // Any manual changes will be overwritten on the next regeneration. 5 + 6 + pub mod actor; 7 + pub mod album; 8 + pub mod apikey; 9 + pub mod artist; 10 + pub mod charts; 11 + pub mod dropbox; 12 + pub mod feed; 13 + pub mod googledrive; 14 + pub mod like; 15 + pub mod player; 16 + pub mod playlist; 17 + pub mod radio; 18 + pub mod scrobble; 19 + pub mod shout; 20 + pub mod song; 21 + pub mod spotify; 22 + pub mod stats;
+22
crates/jacquard-api/src/app_rocksky.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // This file was automatically generated from Lexicon schemas. 4 + // Any manual changes will be overwritten on the next regeneration. 5 + 6 + pub mod actor; 7 + pub mod album; 8 + pub mod apikey; 9 + pub mod artist; 10 + pub mod charts; 11 + pub mod dropbox; 12 + pub mod feed; 13 + pub mod googledrive; 14 + pub mod like; 15 + pub mod player; 16 + pub mod playlist; 17 + pub mod radio; 18 + pub mod scrobble; 19 + pub mod shout; 20 + pub mod song; 21 + pub mod spotify; 22 + pub mod stats;
+6
crates/jacquard-api/src/lib.rs
··· 12 #[cfg(feature = "app_ocho")] 13 pub mod app_ocho; 14 15 #[cfg(feature = "beauty_cybernetic")] 16 pub mod beauty_cybernetic; 17 ··· 86 87 #[cfg(feature = "net_aftertheinter")] 88 pub mod net_aftertheinter; 89 90 #[cfg(feature = "net_anisota")] 91 pub mod net_anisota;
··· 12 #[cfg(feature = "app_ocho")] 13 pub mod app_ocho; 14 15 + #[cfg(feature = "app_rocksky")] 16 + pub mod app_rocksky; 17 + 18 #[cfg(feature = "beauty_cybernetic")] 19 pub mod beauty_cybernetic; 20 ··· 89 90 #[cfg(feature = "net_aftertheinter")] 91 pub mod net_aftertheinter; 92 + 93 + #[cfg(feature = "net_altq")] 94 + pub mod net_altq; 95 96 #[cfg(feature = "net_anisota")] 97 pub mod net_anisota;
+135
crates/jacquard-api/src/net_altq/aqfile.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: net.altq.aqfile 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + /// Cryptographic checksum for integrity verification. 9 + #[jacquard_derive::lexicon] 10 + #[derive( 11 + serde::Serialize, 12 + serde::Deserialize, 13 + Debug, 14 + Clone, 15 + PartialEq, 16 + Eq, 17 + jacquard_derive::IntoStatic, 18 + Default 19 + )] 20 + #[serde(rename_all = "camelCase")] 21 + pub struct Checksum<'a> { 22 + /// Hash algorithm name. 23 + #[serde(borrow)] 24 + pub algo: jacquard_common::CowStr<'a>, 25 + /// Hex or base64 encoded digest produced by the algorithm. 26 + #[serde(borrow)] 27 + pub hash: jacquard_common::CowStr<'a>, 28 + } 29 + 30 + /// File metadata describing the uploaded blob. 31 + #[jacquard_derive::lexicon] 32 + #[derive( 33 + serde::Serialize, 34 + serde::Deserialize, 35 + Debug, 36 + Clone, 37 + PartialEq, 38 + Eq, 39 + jacquard_derive::IntoStatic, 40 + bon::Builder 41 + )] 42 + #[serde(rename_all = "camelCase")] 43 + pub struct File<'a> { 44 + /// MIME type, e.g. 'video/mp4'. 45 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 46 + #[builder(into)] 47 + #[serde(borrow)] 48 + pub mime_type: Option<jacquard_common::CowStr<'a>>, 49 + /// Client-side last-modified timestamp. 50 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 51 + #[builder(into)] 52 + pub modified_at: Option<jacquard_common::types::string::Datetime>, 53 + /// User-visible filename. 54 + #[serde(borrow)] 55 + #[builder(into)] 56 + pub name: jacquard_common::CowStr<'a>, 57 + /// File size in bytes. 58 + pub size: i64, 59 + } 60 + 61 + /// A record representing an uploaded file blob with metadata. 62 + #[jacquard_derive::lexicon] 63 + #[derive( 64 + serde::Serialize, 65 + serde::Deserialize, 66 + Debug, 67 + Clone, 68 + PartialEq, 69 + Eq, 70 + jacquard_derive::IntoStatic, 71 + bon::Builder 72 + )] 73 + #[serde(rename_all = "camelCase")] 74 + pub struct Aqfile<'a> { 75 + /// Handle or DID of the account to attribute this upload to. 76 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 77 + #[builder(into)] 78 + #[serde(borrow)] 79 + pub attribution: Option<jacquard_common::types::ident::AtIdentifier<'a>>, 80 + /// The uploaded blob reference. Note: Individual PDS instances may enforce lower size limits. 81 + #[serde(borrow)] 82 + pub blob: jacquard_common::types::blob::Blob<'a>, 83 + /// Optional cryptographic checksum for integrity verification. 84 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 85 + #[builder(into)] 86 + #[serde(borrow)] 87 + pub checksum: Option<crate::net_altq::aqfile::Checksum<'a>>, 88 + /// Timestamp when this record was created. 89 + pub created_at: jacquard_common::types::string::Datetime, 90 + /// Metadata about the file. 91 + #[serde(borrow)] 92 + pub file: crate::net_altq::aqfile::File<'a>, 93 + } 94 + 95 + /// Typed wrapper for GetRecord response with this collection's record type. 96 + #[derive( 97 + serde::Serialize, 98 + serde::Deserialize, 99 + Debug, 100 + Clone, 101 + PartialEq, 102 + Eq, 103 + jacquard_derive::IntoStatic 104 + )] 105 + #[serde(rename_all = "camelCase")] 106 + pub struct AqfileGetRecordOutput<'a> { 107 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 108 + #[serde(borrow)] 109 + pub cid: std::option::Option<jacquard_common::types::string::Cid<'a>>, 110 + #[serde(borrow)] 111 + pub uri: jacquard_common::types::string::AtUri<'a>, 112 + #[serde(borrow)] 113 + pub value: Aqfile<'a>, 114 + } 115 + 116 + /// Marker type for deserializing records from this collection. 117 + pub struct AqfileRecord; 118 + impl jacquard_common::xrpc::XrpcResp for AqfileRecord { 119 + const NSID: &'static str = "net.altq.aqfile"; 120 + const ENCODING: &'static str = "application/json"; 121 + type Output<'de> = AqfileGetRecordOutput<'de>; 122 + type Err<'de> = jacquard_common::types::collection::RecordError<'de>; 123 + } 124 + 125 + impl jacquard_common::types::collection::Collection for Aqfile<'_> { 126 + const NSID: &'static str = "net.altq.aqfile"; 127 + type Record = AqfileRecord; 128 + } 129 + 130 + impl From<AqfileGetRecordOutput<'_>> for Aqfile<'_> { 131 + fn from(output: AqfileGetRecordOutput<'_>) -> Self { 132 + use jacquard_common::IntoStatic; 133 + output.value.into_static() 134 + } 135 + }
+6
crates/jacquard-api/src/net_altq 2.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // This file was automatically generated from Lexicon schemas. 4 + // Any manual changes will be overwritten on the next regeneration. 5 + 6 + pub mod aqfile;
+6
crates/jacquard-api/src/net_altq.rs
···
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // This file was automatically generated from Lexicon schemas. 4 + // Any manual changes will be overwritten on the next regeneration. 5 + 6 + pub mod aqfile;
+5
lexicons.kdl
··· 94 repo "https://github.com/Gregoor/skylights" 95 pattern "**/*.json" 96 }
··· 94 repo "https://github.com/Gregoor/skylights" 95 pattern "**/*.json" 96 } 97 + 98 + source "rocksky" type="git" priority=50 { 99 + repo "https://github.com/tsirysndr/rocksky-lexicons/" 100 + pattern "lexicons/**/*.json" 101 + }