mirror of
https://github.com/OMGeeky/google-apis-rs.git
synced 2026-01-23 19:50:44 +01:00
make youtube3
This commit is contained in:
37
gen/youtube3/Cargo.toml
Normal file
37
gen/youtube3/Cargo.toml
Normal file
@@ -0,0 +1,37 @@
|
||||
# DO NOT EDIT !
|
||||
# This file was generated automatically from 'src/generator/templates/Cargo.toml.mako'
|
||||
# DO NOT EDIT !
|
||||
[package]
|
||||
|
||||
name = "google-youtube3"
|
||||
version = "5.0.5+20240417"
|
||||
authors = ["Sebastian Thiel <byronimo@gmail.com>"]
|
||||
description = "A complete library to interact with YouTube (protocol v3)"
|
||||
repository = "https://github.com/Byron/google-apis-rs/tree/main/gen/youtube3"
|
||||
homepage = "https://developers.google.com/youtube/"
|
||||
documentation = "https://docs.rs/google-youtube3/5.0.5+20240417"
|
||||
license = "MIT"
|
||||
keywords = ["youtube", "google", "protocol", "web", "api"]
|
||||
autobins = false
|
||||
edition = "2018"
|
||||
|
||||
|
||||
[dependencies]
|
||||
anyhow = "^ 1.0"
|
||||
hyper-rustls = "0.25.0"
|
||||
mime = "^ 0.3.0"
|
||||
serde = { version = "^ 1.0", features = ["derive"] }
|
||||
serde_json = "^ 1.0"
|
||||
itertools = "^ 0.10"
|
||||
google-apis-common = { path = "../../google-apis-common", version = "6.0.3" }
|
||||
hyper = "^ 0.14"
|
||||
http = "^0.2"
|
||||
tokio = "^1.0"
|
||||
tower-service = "^0.3.1"
|
||||
url = "= 1.7"
|
||||
|
||||
|
||||
|
||||
[features]
|
||||
yup-oauth2 = ["google-apis-common/yup-oauth2"]
|
||||
default = ["yup-oauth2"]
|
||||
30
gen/youtube3/LICENSE.md
Normal file
30
gen/youtube3/LICENSE.md
Normal file
@@ -0,0 +1,30 @@
|
||||
<!---
|
||||
DO NOT EDIT !
|
||||
This file was generated automatically from 'src/generator/templates/LICENSE.md.mako'
|
||||
DO NOT EDIT !
|
||||
-->
|
||||
The MIT License (MIT)
|
||||
=====================
|
||||
|
||||
Copyright 2015–2024 Sebastian Thiel
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the “Software”), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
270
gen/youtube3/README.md
Normal file
270
gen/youtube3/README.md
Normal file
@@ -0,0 +1,270 @@
|
||||
<!---
|
||||
DO NOT EDIT !
|
||||
This file was generated automatically from 'src/generator/templates/api/README.md.mako'
|
||||
DO NOT EDIT !
|
||||
-->
|
||||
The `google-youtube3` library allows access to all features of the *Google YouTube* service.
|
||||
|
||||
This documentation was generated from *YouTube* crate version *5.0.5+20240417*, where *20240417* is the exact revision of the *youtube:v3* schema built by the [mako](http://www.makotemplates.org/) code generator *v5.0.5*.
|
||||
|
||||
Everything else about the *YouTube* *v3* API can be found at the
|
||||
[official documentation site](https://developers.google.com/youtube/).
|
||||
# Features
|
||||
|
||||
Handle the following *Resources* with ease from the central [hub](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/YouTube) ...
|
||||
|
||||
* [abuse reports](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::AbuseReport)
|
||||
* [*insert*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::AbuseReportInsertCall)
|
||||
* [activities](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::Activity)
|
||||
* [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::ActivityListCall)
|
||||
* [captions](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::Caption)
|
||||
* [*delete*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::CaptionDeleteCall), [*download*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::CaptionDownloadCall), [*insert*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::CaptionInsertCall), [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::CaptionListCall) and [*update*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::CaptionUpdateCall)
|
||||
* channel banners
|
||||
* [*insert*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::ChannelBannerInsertCall)
|
||||
* [channel sections](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::ChannelSection)
|
||||
* [*delete*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::ChannelSectionDeleteCall), [*insert*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::ChannelSectionInsertCall), [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::ChannelSectionListCall) and [*update*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::ChannelSectionUpdateCall)
|
||||
* [channels](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::Channel)
|
||||
* [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::ChannelListCall) and [*update*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::ChannelUpdateCall)
|
||||
* [comment threads](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::CommentThread)
|
||||
* [*insert*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::CommentThreadInsertCall) and [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::CommentThreadListCall)
|
||||
* [comments](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::Comment)
|
||||
* [*delete*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::CommentDeleteCall), [*insert*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::CommentInsertCall), [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::CommentListCall), [*mark as spam*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::CommentMarkAsSpamCall), [*set moderation status*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::CommentSetModerationStatusCall) and [*update*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::CommentUpdateCall)
|
||||
* [i18n languages](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::I18nLanguage)
|
||||
* [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::I18nLanguageListCall)
|
||||
* [i18n regions](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::I18nRegion)
|
||||
* [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::I18nRegionListCall)
|
||||
* [live broadcasts](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveBroadcast)
|
||||
* [*bind*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveBroadcastBindCall), [*delete*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveBroadcastDeleteCall), [*insert*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveBroadcastInsertCall), [*insert cuepoint*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveBroadcastInsertCuepointCall), [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveBroadcastListCall), [*transition*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveBroadcastTransitionCall) and [*update*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveBroadcastUpdateCall)
|
||||
* [live chat bans](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveChatBan)
|
||||
* [*delete*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveChatBanDeleteCall) and [*insert*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveChatBanInsertCall)
|
||||
* [live chat messages](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveChatMessage)
|
||||
* [*delete*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveChatMessageDeleteCall), [*insert*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveChatMessageInsertCall) and [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveChatMessageListCall)
|
||||
* [live chat moderators](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveChatModerator)
|
||||
* [*delete*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveChatModeratorDeleteCall), [*insert*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveChatModeratorInsertCall) and [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveChatModeratorListCall)
|
||||
* [live streams](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveStream)
|
||||
* [*delete*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveStreamDeleteCall), [*insert*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveStreamInsertCall), [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveStreamListCall) and [*update*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::LiveStreamUpdateCall)
|
||||
* [members](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::Member)
|
||||
* [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::MemberListCall)
|
||||
* [memberships levels](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::MembershipsLevel)
|
||||
* [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::MembershipsLevelListCall)
|
||||
* [playlist images](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::PlaylistImage)
|
||||
* [*delete*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::PlaylistImageDeleteCall), [*insert*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::PlaylistImageInsertCall), [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::PlaylistImageListCall) and [*update*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::PlaylistImageUpdateCall)
|
||||
* [playlist items](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::PlaylistItem)
|
||||
* [*delete*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::PlaylistItemDeleteCall), [*insert*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::PlaylistItemInsertCall), [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::PlaylistItemListCall) and [*update*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::PlaylistItemUpdateCall)
|
||||
* [playlists](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::Playlist)
|
||||
* [*delete*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::PlaylistDeleteCall), [*insert*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::PlaylistInsertCall), [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::PlaylistListCall) and [*update*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::PlaylistUpdateCall)
|
||||
* search
|
||||
* [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::SearchListCall)
|
||||
* [subscriptions](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::Subscription)
|
||||
* [*delete*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::SubscriptionDeleteCall), [*insert*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::SubscriptionInsertCall) and [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::SubscriptionListCall)
|
||||
* [super chat events](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::SuperChatEvent)
|
||||
* [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::SuperChatEventListCall)
|
||||
* tests
|
||||
* [*insert*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::TestInsertCall)
|
||||
* [third party links](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::ThirdPartyLink)
|
||||
* [*delete*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::ThirdPartyLinkDeleteCall), [*insert*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::ThirdPartyLinkInsertCall), [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::ThirdPartyLinkListCall) and [*update*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::ThirdPartyLinkUpdateCall)
|
||||
* [thumbnails](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::Thumbnail)
|
||||
* [*set*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::ThumbnailSetCall)
|
||||
* [video abuse report reasons](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::VideoAbuseReportReason)
|
||||
* [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::VideoAbuseReportReasonListCall)
|
||||
* [video categories](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::VideoCategory)
|
||||
* [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::VideoCategoryListCall)
|
||||
* [videos](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::Video)
|
||||
* [*delete*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::VideoDeleteCall), [*get rating*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::VideoGetRatingCall), [*insert*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::VideoInsertCall), [*list*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::VideoListCall), [*rate*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::VideoRateCall), [*report abuse*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::VideoReportAbuseCall) and [*update*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::VideoUpdateCall)
|
||||
* watermarks
|
||||
* [*set*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::WatermarkSetCall) and [*unset*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::WatermarkUnsetCall)
|
||||
* youtube
|
||||
* [*v3 update comment threads*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::YoutubeV3UpdateCommentThreadCall)
|
||||
|
||||
|
||||
Upload supported by ...
|
||||
|
||||
* [*insert captions*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::CaptionInsertCall)
|
||||
* [*update captions*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::CaptionUpdateCall)
|
||||
* [*insert channel banners*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::ChannelBannerInsertCall)
|
||||
* [*insert playlist images*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::PlaylistImageInsertCall)
|
||||
* [*update playlist images*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::PlaylistImageUpdateCall)
|
||||
* [*set thumbnails*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::ThumbnailSetCall)
|
||||
* [*insert videos*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::VideoInsertCall)
|
||||
* [*set watermarks*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::WatermarkSetCall)
|
||||
|
||||
Download supported by ...
|
||||
|
||||
* [*download captions*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/api::CaptionDownloadCall)
|
||||
|
||||
|
||||
|
||||
# Structure of this Library
|
||||
|
||||
The API is structured into the following primary items:
|
||||
|
||||
* **[Hub](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/YouTube)**
|
||||
* a central object to maintain state and allow accessing all *Activities*
|
||||
* creates [*Method Builders*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/client::MethodsBuilder) which in turn
|
||||
allow access to individual [*Call Builders*](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/client::CallBuilder)
|
||||
* **[Resources](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/client::Resource)**
|
||||
* primary types that you can apply *Activities* to
|
||||
* a collection of properties and *Parts*
|
||||
* **[Parts](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/client::Part)**
|
||||
* a collection of properties
|
||||
* never directly used in *Activities*
|
||||
* **[Activities](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/client::CallBuilder)**
|
||||
* operations to apply to *Resources*
|
||||
|
||||
All *structures* are marked with applicable traits to further categorize them and ease browsing.
|
||||
|
||||
Generally speaking, you can invoke *Activities* like this:
|
||||
|
||||
```Rust,ignore
|
||||
let r = hub.resource().activity(...).doit().await
|
||||
```
|
||||
|
||||
Or specifically ...
|
||||
|
||||
```ignore
|
||||
let r = hub.videos().delete(...).doit().await
|
||||
let r = hub.videos().get_rating(...).doit().await
|
||||
let r = hub.videos().insert(...).doit().await
|
||||
let r = hub.videos().list(...).doit().await
|
||||
let r = hub.videos().rate(...).doit().await
|
||||
let r = hub.videos().report_abuse(...).doit().await
|
||||
let r = hub.videos().update(...).doit().await
|
||||
```
|
||||
|
||||
The `resource()` and `activity(...)` calls create [builders][builder-pattern]. The second one dealing with `Activities`
|
||||
supports various methods to configure the impending operation (not shown here). It is made such that all required arguments have to be
|
||||
specified right away (i.e. `(...)`), whereas all optional ones can be [build up][builder-pattern] as desired.
|
||||
The `doit()` method performs the actual communication with the server and returns the respective result.
|
||||
|
||||
# Usage
|
||||
|
||||
## Setting up your Project
|
||||
|
||||
To use this library, you would put the following lines into your `Cargo.toml` file:
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
google-youtube3 = "*"
|
||||
serde = "^1.0"
|
||||
serde_json = "^1.0"
|
||||
```
|
||||
|
||||
## A complete example
|
||||
|
||||
```Rust
|
||||
extern crate hyper;
|
||||
extern crate hyper_rustls;
|
||||
extern crate google_youtube3 as youtube3;
|
||||
use youtube3::{Result, Error};
|
||||
use std::default::Default;
|
||||
use youtube3::{YouTube, oauth2, hyper, hyper_rustls, chrono, FieldMask};
|
||||
|
||||
// Get an ApplicationSecret instance by some means. It contains the `client_id` and
|
||||
// `client_secret`, among other things.
|
||||
let secret: oauth2::ApplicationSecret = Default::default();
|
||||
// Instantiate the authenticator. It will choose a suitable authentication flow for you,
|
||||
// unless you replace `None` with the desired Flow.
|
||||
// Provide your own `AuthenticatorDelegate` to adjust the way it operates and get feedback about
|
||||
// what's going on. You probably want to bring in your own `TokenStorage` to persist tokens and
|
||||
// retrieve them from storage.
|
||||
let auth = oauth2::InstalledFlowAuthenticator::builder(
|
||||
secret,
|
||||
oauth2::InstalledFlowReturnMethod::HTTPRedirect,
|
||||
).build().await.unwrap();
|
||||
let mut hub = YouTube::new(hyper::Client::builder().build(hyper_rustls::HttpsConnectorBuilder::new().with_native_roots().unwrap().https_or_http().enable_http1().build()), auth);
|
||||
// You can configure optional parameters by calling the respective setters at will, and
|
||||
// execute the final call using `doit()`.
|
||||
// Values shown here are possibly random and not representative !
|
||||
let result = hub.videos().list(&vec!["et".into()])
|
||||
.video_category_id("magna")
|
||||
.region_code("no")
|
||||
.page_token("ipsum")
|
||||
.on_behalf_of_content_owner("voluptua.")
|
||||
.my_rating(&Default::default())
|
||||
.max_width(-27)
|
||||
.max_results(93)
|
||||
.max_height(-80)
|
||||
.locale("amet.")
|
||||
.add_id("takimata")
|
||||
.hl("amet.")
|
||||
.chart(&Default::default())
|
||||
.doit().await;
|
||||
|
||||
match result {
|
||||
Err(e) => match e {
|
||||
// The Error enum provides details about what exactly happened.
|
||||
// You can also just use its `Debug`, `Display` or `Error` traits
|
||||
Error::HttpError(_)
|
||||
|Error::Io(_)
|
||||
|Error::MissingAPIKey
|
||||
|Error::MissingToken(_)
|
||||
|Error::Cancelled
|
||||
|Error::UploadSizeLimitExceeded(_, _)
|
||||
|Error::Failure(_)
|
||||
|Error::BadRequest(_)
|
||||
|Error::FieldClash(_)
|
||||
|Error::JsonDecodeError(_, _) => println!("{}", e),
|
||||
},
|
||||
Ok(res) => println!("Success: {:?}", res),
|
||||
}
|
||||
|
||||
```
|
||||
## Handling Errors
|
||||
|
||||
All errors produced by the system are provided either as [Result](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/client::Result) enumeration as return value of
|
||||
the doit() methods, or handed as possibly intermediate results to either the
|
||||
[Hub Delegate](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/client::Delegate), or the [Authenticator Delegate](https://docs.rs/yup-oauth2/*/yup_oauth2/trait.AuthenticatorDelegate.html).
|
||||
|
||||
When delegates handle errors or intermediate values, they may have a chance to instruct the system to retry. This
|
||||
makes the system potentially resilient to all kinds of errors.
|
||||
|
||||
## Uploads and Downloads
|
||||
If a method supports downloads, the response body, which is part of the [Result](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/client::Result), should be
|
||||
read by you to obtain the media.
|
||||
If such a method also supports a [Response Result](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/client::ResponseResult), it will return that by default.
|
||||
You can see it as meta-data for the actual media. To trigger a media download, you will have to set up the builder by making
|
||||
this call: `.param("alt", "media")`.
|
||||
|
||||
Methods supporting uploads can do so using up to 2 different protocols:
|
||||
*simple* and *resumable*. The distinctiveness of each is represented by customized
|
||||
`doit(...)` methods, which are then named `upload(...)` and `upload_resumable(...)` respectively.
|
||||
|
||||
## Customization and Callbacks
|
||||
|
||||
You may alter the way an `doit()` method is called by providing a [delegate](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/client::Delegate) to the
|
||||
[Method Builder](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/client::CallBuilder) before making the final `doit()` call.
|
||||
Respective methods will be called to provide progress information, as well as determine whether the system should
|
||||
retry on failure.
|
||||
|
||||
The [delegate trait](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/client::Delegate) is default-implemented, allowing you to customize it with minimal effort.
|
||||
|
||||
## Optional Parts in Server-Requests
|
||||
|
||||
All structures provided by this library are made to be [encodable](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/client::RequestValue) and
|
||||
[decodable](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/client::ResponseResult) via *json*. Optionals are used to indicate that partial requests are responses
|
||||
are valid.
|
||||
Most optionals are are considered [Parts](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/client::Part) which are identifiable by name, which will be sent to
|
||||
the server to indicate either the set parts of the request or the desired parts in the response.
|
||||
|
||||
## Builder Arguments
|
||||
|
||||
Using [method builders](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/client::CallBuilder), you are able to prepare an action call by repeatedly calling it's methods.
|
||||
These will always take a single argument, for which the following statements are true.
|
||||
|
||||
* [PODs][wiki-pod] are handed by copy
|
||||
* strings are passed as `&str`
|
||||
* [request values](https://docs.rs/google-youtube3/5.0.5+20240417/google_youtube3/client::RequestValue) are moved
|
||||
|
||||
Arguments will always be copied or cloned into the builder, to make them independent of their original life times.
|
||||
|
||||
[wiki-pod]: http://en.wikipedia.org/wiki/Plain_old_data_structure
|
||||
[builder-pattern]: http://en.wikipedia.org/wiki/Builder_pattern
|
||||
[google-go-api]: https://github.com/google/google-api-go-client
|
||||
|
||||
# License
|
||||
The **youtube3** library was generated by Sebastian Thiel, and is placed
|
||||
under the *MIT* license.
|
||||
You can read the full text at the repository's [license file][repo-license].
|
||||
|
||||
[repo-license]: https://github.com/Byron/google-apis-rsblob/main/LICENSE.md
|
||||
|
||||
25627
gen/youtube3/src/api/call_builders.rs
Normal file
25627
gen/youtube3/src/api/call_builders.rs
Normal file
File diff suppressed because it is too large
Load Diff
12279
gen/youtube3/src/api/enums.rs
Normal file
12279
gen/youtube3/src/api/enums.rs
Normal file
File diff suppressed because it is too large
Load Diff
208
gen/youtube3/src/api/hub.rs
Normal file
208
gen/youtube3/src/api/hub.rs
Normal file
@@ -0,0 +1,208 @@
|
||||
use super::*;
|
||||
|
||||
/// Central instance to access all YouTube related resource activities
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Instantiate a new hub
|
||||
///
|
||||
/// ```test_harness,no_run
|
||||
/// extern crate hyper;
|
||||
/// extern crate hyper_rustls;
|
||||
/// extern crate google_youtube3 as youtube3;
|
||||
/// use youtube3::{Result, Error};
|
||||
/// # async fn dox() {
|
||||
/// use std::default::Default;
|
||||
/// use youtube3::{YouTube, oauth2, hyper, hyper_rustls, chrono, FieldMask};
|
||||
///
|
||||
/// // Get an ApplicationSecret instance by some means. It contains the `client_id` and
|
||||
/// // `client_secret`, among other things.
|
||||
/// let secret: oauth2::ApplicationSecret = Default::default();
|
||||
/// // Instantiate the authenticator. It will choose a suitable authentication flow for you,
|
||||
/// // unless you replace `None` with the desired Flow.
|
||||
/// // Provide your own `AuthenticatorDelegate` to adjust the way it operates and get feedback about
|
||||
/// // what's going on. You probably want to bring in your own `TokenStorage` to persist tokens and
|
||||
/// // retrieve them from storage.
|
||||
/// let auth = oauth2::InstalledFlowAuthenticator::builder(
|
||||
/// secret,
|
||||
/// oauth2::InstalledFlowReturnMethod::HTTPRedirect,
|
||||
/// ).build().await.unwrap();
|
||||
/// let mut hub = YouTube::new(hyper::Client::builder().build(hyper_rustls::HttpsConnectorBuilder::new().with_native_roots().unwrap().https_or_http().enable_http1().build()), auth);
|
||||
/// // You can configure optional parameters by calling the respective setters at will, and
|
||||
/// // execute the final call using `doit()`.
|
||||
/// // Values shown here are possibly random and not representative !
|
||||
/// let result = hub.videos().list(&vec!["duo".into()])
|
||||
/// .video_category_id("ipsum")
|
||||
/// .region_code("sed")
|
||||
/// .page_token("ut")
|
||||
/// .on_behalf_of_content_owner("gubergren")
|
||||
/// .my_rating(&Default::default())
|
||||
/// .max_width(-16)
|
||||
/// .max_results(44)
|
||||
/// .max_height(-50)
|
||||
/// .locale("ipsum")
|
||||
/// .add_id("est")
|
||||
/// .hl("gubergren")
|
||||
/// .chart(&Default::default())
|
||||
/// .doit().await;
|
||||
///
|
||||
/// match result {
|
||||
/// Err(e) => match e {
|
||||
/// // The Error enum provides details about what exactly happened.
|
||||
/// // You can also just use its `Debug`, `Display` or `Error` traits
|
||||
/// Error::HttpError(_)
|
||||
/// |Error::Io(_)
|
||||
/// |Error::MissingAPIKey
|
||||
/// |Error::MissingToken(_)
|
||||
/// |Error::Cancelled
|
||||
/// |Error::UploadSizeLimitExceeded(_, _)
|
||||
/// |Error::Failure(_)
|
||||
/// |Error::BadRequest(_)
|
||||
/// |Error::FieldClash(_)
|
||||
/// |Error::JsonDecodeError(_, _) => println!("{}", e),
|
||||
/// },
|
||||
/// Ok(res) => println!("Success: {:?}", res),
|
||||
/// }
|
||||
/// # }
|
||||
/// ```
|
||||
#[derive(Clone)]
|
||||
pub struct YouTube<S> {
|
||||
pub client: hyper::Client<S, hyper::body::Body>,
|
||||
pub auth: Box<dyn client::GetToken>,
|
||||
pub(super) _user_agent: String,
|
||||
pub(super) _base_url: String,
|
||||
pub(super) _root_url: String,
|
||||
}
|
||||
|
||||
impl<'a, S> client::Hub for YouTube<S> {}
|
||||
|
||||
impl<'a, S> YouTube<S> {
|
||||
|
||||
pub fn new<A: 'static + client::GetToken>(client: hyper::Client<S, hyper::body::Body>, auth: A) -> YouTube<S> {
|
||||
YouTube {
|
||||
client,
|
||||
auth: Box::new(auth),
|
||||
_user_agent: "google-api-rust-client/5.0.5".to_string(),
|
||||
_base_url: "https://youtube.googleapis.com/".to_string(),
|
||||
_root_url: "https://youtube.googleapis.com/".to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn abuse_reports(&'a self) -> AbuseReportMethods<'a, S> {
|
||||
AbuseReportMethods { hub: &self }
|
||||
}
|
||||
pub fn activities(&'a self) -> ActivityMethods<'a, S> {
|
||||
ActivityMethods { hub: &self }
|
||||
}
|
||||
pub fn captions(&'a self) -> CaptionMethods<'a, S> {
|
||||
CaptionMethods { hub: &self }
|
||||
}
|
||||
pub fn channel_banners(&'a self) -> ChannelBannerMethods<'a, S> {
|
||||
ChannelBannerMethods { hub: &self }
|
||||
}
|
||||
pub fn channel_sections(&'a self) -> ChannelSectionMethods<'a, S> {
|
||||
ChannelSectionMethods { hub: &self }
|
||||
}
|
||||
pub fn channels(&'a self) -> ChannelMethods<'a, S> {
|
||||
ChannelMethods { hub: &self }
|
||||
}
|
||||
pub fn comment_threads(&'a self) -> CommentThreadMethods<'a, S> {
|
||||
CommentThreadMethods { hub: &self }
|
||||
}
|
||||
pub fn comments(&'a self) -> CommentMethods<'a, S> {
|
||||
CommentMethods { hub: &self }
|
||||
}
|
||||
pub fn i18n_languages(&'a self) -> I18nLanguageMethods<'a, S> {
|
||||
I18nLanguageMethods { hub: &self }
|
||||
}
|
||||
pub fn i18n_regions(&'a self) -> I18nRegionMethods<'a, S> {
|
||||
I18nRegionMethods { hub: &self }
|
||||
}
|
||||
pub fn live_broadcasts(&'a self) -> LiveBroadcastMethods<'a, S> {
|
||||
LiveBroadcastMethods { hub: &self }
|
||||
}
|
||||
pub fn live_chat_bans(&'a self) -> LiveChatBanMethods<'a, S> {
|
||||
LiveChatBanMethods { hub: &self }
|
||||
}
|
||||
pub fn live_chat_messages(&'a self) -> LiveChatMessageMethods<'a, S> {
|
||||
LiveChatMessageMethods { hub: &self }
|
||||
}
|
||||
pub fn live_chat_moderators(&'a self) -> LiveChatModeratorMethods<'a, S> {
|
||||
LiveChatModeratorMethods { hub: &self }
|
||||
}
|
||||
pub fn live_streams(&'a self) -> LiveStreamMethods<'a, S> {
|
||||
LiveStreamMethods { hub: &self }
|
||||
}
|
||||
pub fn members(&'a self) -> MemberMethods<'a, S> {
|
||||
MemberMethods { hub: &self }
|
||||
}
|
||||
pub fn memberships_levels(&'a self) -> MembershipsLevelMethods<'a, S> {
|
||||
MembershipsLevelMethods { hub: &self }
|
||||
}
|
||||
pub fn playlist_images(&'a self) -> PlaylistImageMethods<'a, S> {
|
||||
PlaylistImageMethods { hub: &self }
|
||||
}
|
||||
pub fn playlist_items(&'a self) -> PlaylistItemMethods<'a, S> {
|
||||
PlaylistItemMethods { hub: &self }
|
||||
}
|
||||
pub fn playlists(&'a self) -> PlaylistMethods<'a, S> {
|
||||
PlaylistMethods { hub: &self }
|
||||
}
|
||||
pub fn search(&'a self) -> SearchMethods<'a, S> {
|
||||
SearchMethods { hub: &self }
|
||||
}
|
||||
pub fn subscriptions(&'a self) -> SubscriptionMethods<'a, S> {
|
||||
SubscriptionMethods { hub: &self }
|
||||
}
|
||||
pub fn super_chat_events(&'a self) -> SuperChatEventMethods<'a, S> {
|
||||
SuperChatEventMethods { hub: &self }
|
||||
}
|
||||
pub fn tests(&'a self) -> TestMethods<'a, S> {
|
||||
TestMethods { hub: &self }
|
||||
}
|
||||
pub fn third_party_links(&'a self) -> ThirdPartyLinkMethods<'a, S> {
|
||||
ThirdPartyLinkMethods { hub: &self }
|
||||
}
|
||||
pub fn thumbnails(&'a self) -> ThumbnailMethods<'a, S> {
|
||||
ThumbnailMethods { hub: &self }
|
||||
}
|
||||
pub fn video_abuse_report_reasons(&'a self) -> VideoAbuseReportReasonMethods<'a, S> {
|
||||
VideoAbuseReportReasonMethods { hub: &self }
|
||||
}
|
||||
pub fn video_categories(&'a self) -> VideoCategoryMethods<'a, S> {
|
||||
VideoCategoryMethods { hub: &self }
|
||||
}
|
||||
pub fn videos(&'a self) -> VideoMethods<'a, S> {
|
||||
VideoMethods { hub: &self }
|
||||
}
|
||||
pub fn watermarks(&'a self) -> WatermarkMethods<'a, S> {
|
||||
WatermarkMethods { hub: &self }
|
||||
}
|
||||
pub fn youtube(&'a self) -> YoutubeMethods<'a, S> {
|
||||
YoutubeMethods { hub: &self }
|
||||
}
|
||||
|
||||
/// Set the user-agent header field to use in all requests to the server.
|
||||
/// It defaults to `google-api-rust-client/5.0.5`.
|
||||
///
|
||||
/// Returns the previously set user-agent.
|
||||
pub fn user_agent(&mut self, agent_name: String) -> String {
|
||||
mem::replace(&mut self._user_agent, agent_name)
|
||||
}
|
||||
|
||||
/// Set the base url to use in all requests to the server.
|
||||
/// It defaults to `https://youtube.googleapis.com/`.
|
||||
///
|
||||
/// Returns the previously set base url.
|
||||
pub fn base_url(&mut self, new_base_url: String) -> String {
|
||||
mem::replace(&mut self._base_url, new_base_url)
|
||||
}
|
||||
|
||||
/// Set the root url to use in all requests to the server.
|
||||
/// It defaults to `https://youtube.googleapis.com/`.
|
||||
///
|
||||
/// Returns the previously set root url.
|
||||
pub fn root_url(&mut self, new_root_url: String) -> String {
|
||||
mem::replace(&mut self._root_url, new_root_url)
|
||||
}
|
||||
}
|
||||
2941
gen/youtube3/src/api/method_builders.rs
Normal file
2941
gen/youtube3/src/api/method_builders.rs
Normal file
File diff suppressed because it is too large
Load Diff
35
gen/youtube3/src/api/mod.rs
Normal file
35
gen/youtube3/src/api/mod.rs
Normal file
@@ -0,0 +1,35 @@
|
||||
use std::collections::HashMap;
|
||||
use std::cell::RefCell;
|
||||
use std::default::Default;
|
||||
use std::collections::BTreeSet;
|
||||
use std::error::Error as StdError;
|
||||
use serde_json as json;
|
||||
use std::io;
|
||||
use std::fs;
|
||||
use std::mem;
|
||||
|
||||
use hyper::client::connect;
|
||||
use tokio::io::{AsyncRead, AsyncWrite};
|
||||
use tokio::time::sleep;
|
||||
use tower_service;
|
||||
use serde::{Serialize, Deserialize};
|
||||
|
||||
use crate::{client, client::GetToken, client::serde_with};
|
||||
|
||||
mod utilities;
|
||||
pub use utilities::*;
|
||||
|
||||
mod hub;
|
||||
pub use hub::*;
|
||||
|
||||
mod schemas;
|
||||
pub use schemas::*;
|
||||
|
||||
mod method_builders;
|
||||
pub use method_builders::*;
|
||||
|
||||
mod call_builders;
|
||||
pub use call_builders::*;
|
||||
|
||||
pub mod enums;
|
||||
pub(crate) use enums::*;
|
||||
7108
gen/youtube3/src/api/schemas.rs
Normal file
7108
gen/youtube3/src/api/schemas.rs
Normal file
File diff suppressed because it is too large
Load Diff
48
gen/youtube3/src/api/utilities.rs
Normal file
48
gen/youtube3/src/api/utilities.rs
Normal file
@@ -0,0 +1,48 @@
|
||||
use super::*;
|
||||
/// Identifies the an OAuth2 authorization scope.
|
||||
/// A scope is needed when requesting an
|
||||
/// [authorization token](https://developers.google.com/youtube/v3/guides/authentication).
|
||||
#[derive(PartialEq, Eq, Hash, Debug, Clone)]
|
||||
pub enum Scope {
|
||||
/// Manage your YouTube account
|
||||
Full,
|
||||
|
||||
/// See a list of your current active channel members, their current level, and when they became a member
|
||||
ChannelMembershipCreator,
|
||||
|
||||
/// See, edit, and permanently delete your YouTube videos, ratings, comments and captions
|
||||
ForceSsl,
|
||||
|
||||
/// View your YouTube account
|
||||
Readonly,
|
||||
|
||||
/// Manage your YouTube videos
|
||||
Upload,
|
||||
|
||||
/// View and manage your assets and associated content on YouTube
|
||||
Partner,
|
||||
|
||||
/// View private information of your YouTube channel relevant during the audit process with a YouTube partner
|
||||
PartnerChannelAudit,
|
||||
}
|
||||
|
||||
impl AsRef<str> for Scope {
|
||||
fn as_ref(&self) -> &str {
|
||||
match *self {
|
||||
Scope::Full => "https://www.googleapis.com/auth/youtube",
|
||||
Scope::ChannelMembershipCreator => "https://www.googleapis.com/auth/youtube.channel-memberships.creator",
|
||||
Scope::ForceSsl => "https://www.googleapis.com/auth/youtube.force-ssl",
|
||||
Scope::Readonly => "https://www.googleapis.com/auth/youtube.readonly",
|
||||
Scope::Upload => "https://www.googleapis.com/auth/youtube.upload",
|
||||
Scope::Partner => "https://www.googleapis.com/auth/youtubepartner",
|
||||
Scope::PartnerChannelAudit => "https://www.googleapis.com/auth/youtubepartner-channel-audit",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for Scope {
|
||||
fn default() -> Scope {
|
||||
Scope::Readonly
|
||||
}
|
||||
}
|
||||
|
||||
290
gen/youtube3/src/lib.rs
Normal file
290
gen/youtube3/src/lib.rs
Normal file
@@ -0,0 +1,290 @@
|
||||
// DO NOT EDIT !
|
||||
// This file was generated automatically from 'src/generator/templates/api/lib.rs.mako'
|
||||
// DO NOT EDIT !
|
||||
|
||||
//! This documentation was generated from *YouTube* crate version *5.0.5+20240417*, where *20240417* is the exact revision of the *youtube:v3* schema built by the [mako](http://www.makotemplates.org/) code generator *v5.0.5*.
|
||||
//!
|
||||
//! Everything else about the *YouTube* *v3* API can be found at the
|
||||
//! [official documentation site](https://developers.google.com/youtube/).
|
||||
//! The original source code is [on github](https://github.com/Byron/google-apis-rs/tree/main/gen/youtube3).
|
||||
//! # Features
|
||||
//!
|
||||
//! Handle the following *Resources* with ease from the central [hub](YouTube) ...
|
||||
//!
|
||||
//! * [abuse reports](api::AbuseReport)
|
||||
//! * [*insert*](api::AbuseReportInsertCall)
|
||||
//! * [activities](api::Activity)
|
||||
//! * [*list*](api::ActivityListCall)
|
||||
//! * [captions](api::Caption)
|
||||
//! * [*delete*](api::CaptionDeleteCall), [*download*](api::CaptionDownloadCall), [*insert*](api::CaptionInsertCall), [*list*](api::CaptionListCall) and [*update*](api::CaptionUpdateCall)
|
||||
//! * channel banners
|
||||
//! * [*insert*](api::ChannelBannerInsertCall)
|
||||
//! * [channel sections](api::ChannelSection)
|
||||
//! * [*delete*](api::ChannelSectionDeleteCall), [*insert*](api::ChannelSectionInsertCall), [*list*](api::ChannelSectionListCall) and [*update*](api::ChannelSectionUpdateCall)
|
||||
//! * [channels](api::Channel)
|
||||
//! * [*list*](api::ChannelListCall) and [*update*](api::ChannelUpdateCall)
|
||||
//! * [comment threads](api::CommentThread)
|
||||
//! * [*insert*](api::CommentThreadInsertCall) and [*list*](api::CommentThreadListCall)
|
||||
//! * [comments](api::Comment)
|
||||
//! * [*delete*](api::CommentDeleteCall), [*insert*](api::CommentInsertCall), [*list*](api::CommentListCall), [*mark as spam*](api::CommentMarkAsSpamCall), [*set moderation status*](api::CommentSetModerationStatusCall) and [*update*](api::CommentUpdateCall)
|
||||
//! * [i18n languages](api::I18nLanguage)
|
||||
//! * [*list*](api::I18nLanguageListCall)
|
||||
//! * [i18n regions](api::I18nRegion)
|
||||
//! * [*list*](api::I18nRegionListCall)
|
||||
//! * [live broadcasts](api::LiveBroadcast)
|
||||
//! * [*bind*](api::LiveBroadcastBindCall), [*delete*](api::LiveBroadcastDeleteCall), [*insert*](api::LiveBroadcastInsertCall), [*insert cuepoint*](api::LiveBroadcastInsertCuepointCall), [*list*](api::LiveBroadcastListCall), [*transition*](api::LiveBroadcastTransitionCall) and [*update*](api::LiveBroadcastUpdateCall)
|
||||
//! * [live chat bans](api::LiveChatBan)
|
||||
//! * [*delete*](api::LiveChatBanDeleteCall) and [*insert*](api::LiveChatBanInsertCall)
|
||||
//! * [live chat messages](api::LiveChatMessage)
|
||||
//! * [*delete*](api::LiveChatMessageDeleteCall), [*insert*](api::LiveChatMessageInsertCall) and [*list*](api::LiveChatMessageListCall)
|
||||
//! * [live chat moderators](api::LiveChatModerator)
|
||||
//! * [*delete*](api::LiveChatModeratorDeleteCall), [*insert*](api::LiveChatModeratorInsertCall) and [*list*](api::LiveChatModeratorListCall)
|
||||
//! * [live streams](api::LiveStream)
|
||||
//! * [*delete*](api::LiveStreamDeleteCall), [*insert*](api::LiveStreamInsertCall), [*list*](api::LiveStreamListCall) and [*update*](api::LiveStreamUpdateCall)
|
||||
//! * [members](api::Member)
|
||||
//! * [*list*](api::MemberListCall)
|
||||
//! * [memberships levels](api::MembershipsLevel)
|
||||
//! * [*list*](api::MembershipsLevelListCall)
|
||||
//! * [playlist images](api::PlaylistImage)
|
||||
//! * [*delete*](api::PlaylistImageDeleteCall), [*insert*](api::PlaylistImageInsertCall), [*list*](api::PlaylistImageListCall) and [*update*](api::PlaylistImageUpdateCall)
|
||||
//! * [playlist items](api::PlaylistItem)
|
||||
//! * [*delete*](api::PlaylistItemDeleteCall), [*insert*](api::PlaylistItemInsertCall), [*list*](api::PlaylistItemListCall) and [*update*](api::PlaylistItemUpdateCall)
|
||||
//! * [playlists](api::Playlist)
|
||||
//! * [*delete*](api::PlaylistDeleteCall), [*insert*](api::PlaylistInsertCall), [*list*](api::PlaylistListCall) and [*update*](api::PlaylistUpdateCall)
|
||||
//! * search
|
||||
//! * [*list*](api::SearchListCall)
|
||||
//! * [subscriptions](api::Subscription)
|
||||
//! * [*delete*](api::SubscriptionDeleteCall), [*insert*](api::SubscriptionInsertCall) and [*list*](api::SubscriptionListCall)
|
||||
//! * [super chat events](api::SuperChatEvent)
|
||||
//! * [*list*](api::SuperChatEventListCall)
|
||||
//! * tests
|
||||
//! * [*insert*](api::TestInsertCall)
|
||||
//! * [third party links](api::ThirdPartyLink)
|
||||
//! * [*delete*](api::ThirdPartyLinkDeleteCall), [*insert*](api::ThirdPartyLinkInsertCall), [*list*](api::ThirdPartyLinkListCall) and [*update*](api::ThirdPartyLinkUpdateCall)
|
||||
//! * [thumbnails](api::Thumbnail)
|
||||
//! * [*set*](api::ThumbnailSetCall)
|
||||
//! * [video abuse report reasons](api::VideoAbuseReportReason)
|
||||
//! * [*list*](api::VideoAbuseReportReasonListCall)
|
||||
//! * [video categories](api::VideoCategory)
|
||||
//! * [*list*](api::VideoCategoryListCall)
|
||||
//! * [videos](api::Video)
|
||||
//! * [*delete*](api::VideoDeleteCall), [*get rating*](api::VideoGetRatingCall), [*insert*](api::VideoInsertCall), [*list*](api::VideoListCall), [*rate*](api::VideoRateCall), [*report abuse*](api::VideoReportAbuseCall) and [*update*](api::VideoUpdateCall)
|
||||
//! * watermarks
|
||||
//! * [*set*](api::WatermarkSetCall) and [*unset*](api::WatermarkUnsetCall)
|
||||
//! * youtube
|
||||
//! * [*v3 update comment threads*](api::YoutubeV3UpdateCommentThreadCall)
|
||||
//!
|
||||
//!
|
||||
//! Upload supported by ...
|
||||
//!
|
||||
//! * [*insert captions*](api::CaptionInsertCall)
|
||||
//! * [*update captions*](api::CaptionUpdateCall)
|
||||
//! * [*insert channel banners*](api::ChannelBannerInsertCall)
|
||||
//! * [*insert playlist images*](api::PlaylistImageInsertCall)
|
||||
//! * [*update playlist images*](api::PlaylistImageUpdateCall)
|
||||
//! * [*set thumbnails*](api::ThumbnailSetCall)
|
||||
//! * [*insert videos*](api::VideoInsertCall)
|
||||
//! * [*set watermarks*](api::WatermarkSetCall)
|
||||
//!
|
||||
//! Download supported by ...
|
||||
//!
|
||||
//! * [*download captions*](api::CaptionDownloadCall)
|
||||
//!
|
||||
//!
|
||||
//!
|
||||
//! Not what you are looking for ? Find all other Google APIs in their Rust [documentation index](http://byron.github.io/google-apis-rs).
|
||||
//!
|
||||
//! # Structure of this Library
|
||||
//!
|
||||
//! The API is structured into the following primary items:
|
||||
//!
|
||||
//! * **[Hub](YouTube)**
|
||||
//! * a central object to maintain state and allow accessing all *Activities*
|
||||
//! * creates [*Method Builders*](client::MethodsBuilder) which in turn
|
||||
//! allow access to individual [*Call Builders*](client::CallBuilder)
|
||||
//! * **[Resources](client::Resource)**
|
||||
//! * primary types that you can apply *Activities* to
|
||||
//! * a collection of properties and *Parts*
|
||||
//! * **[Parts](client::Part)**
|
||||
//! * a collection of properties
|
||||
//! * never directly used in *Activities*
|
||||
//! * **[Activities](client::CallBuilder)**
|
||||
//! * operations to apply to *Resources*
|
||||
//!
|
||||
//! All *structures* are marked with applicable traits to further categorize them and ease browsing.
|
||||
//!
|
||||
//! Generally speaking, you can invoke *Activities* like this:
|
||||
//!
|
||||
//! ```Rust,ignore
|
||||
//! let r = hub.resource().activity(...).doit().await
|
||||
//! ```
|
||||
//!
|
||||
//! Or specifically ...
|
||||
//!
|
||||
//! ```ignore
|
||||
//! let r = hub.videos().delete(...).doit().await
|
||||
//! let r = hub.videos().get_rating(...).doit().await
|
||||
//! let r = hub.videos().insert(...).doit().await
|
||||
//! let r = hub.videos().list(...).doit().await
|
||||
//! let r = hub.videos().rate(...).doit().await
|
||||
//! let r = hub.videos().report_abuse(...).doit().await
|
||||
//! let r = hub.videos().update(...).doit().await
|
||||
//! ```
|
||||
//!
|
||||
//! The `resource()` and `activity(...)` calls create [builders][builder-pattern]. The second one dealing with `Activities`
|
||||
//! supports various methods to configure the impending operation (not shown here). It is made such that all required arguments have to be
|
||||
//! specified right away (i.e. `(...)`), whereas all optional ones can be [build up][builder-pattern] as desired.
|
||||
//! The `doit()` method performs the actual communication with the server and returns the respective result.
|
||||
//!
|
||||
//! # Usage
|
||||
//!
|
||||
//! ## Setting up your Project
|
||||
//!
|
||||
//! To use this library, you would put the following lines into your `Cargo.toml` file:
|
||||
//!
|
||||
//! ```toml
|
||||
//! [dependencies]
|
||||
//! google-youtube3 = "*"
|
||||
//! serde = "^1.0"
|
||||
//! serde_json = "^1.0"
|
||||
//! ```
|
||||
//!
|
||||
//! ## A complete example
|
||||
//!
|
||||
//! ```test_harness,no_run
|
||||
//! extern crate hyper;
|
||||
//! extern crate hyper_rustls;
|
||||
//! extern crate google_youtube3 as youtube3;
|
||||
//! use youtube3::{Result, Error};
|
||||
//! # async fn dox() {
|
||||
//! use std::default::Default;
|
||||
//! use youtube3::{YouTube, oauth2, hyper, hyper_rustls, chrono, FieldMask};
|
||||
//!
|
||||
//! // Get an ApplicationSecret instance by some means. It contains the `client_id` and
|
||||
//! // `client_secret`, among other things.
|
||||
//! let secret: oauth2::ApplicationSecret = Default::default();
|
||||
//! // Instantiate the authenticator. It will choose a suitable authentication flow for you,
|
||||
//! // unless you replace `None` with the desired Flow.
|
||||
//! // Provide your own `AuthenticatorDelegate` to adjust the way it operates and get feedback about
|
||||
//! // what's going on. You probably want to bring in your own `TokenStorage` to persist tokens and
|
||||
//! // retrieve them from storage.
|
||||
//! let auth = oauth2::InstalledFlowAuthenticator::builder(
|
||||
//! secret,
|
||||
//! oauth2::InstalledFlowReturnMethod::HTTPRedirect,
|
||||
//! ).build().await.unwrap();
|
||||
//! let mut hub = YouTube::new(hyper::Client::builder().build(hyper_rustls::HttpsConnectorBuilder::new().with_native_roots().unwrap().https_or_http().enable_http1().build()), auth);
|
||||
//! // You can configure optional parameters by calling the respective setters at will, and
|
||||
//! // execute the final call using `doit()`.
|
||||
//! // Values shown here are possibly random and not representative !
|
||||
//! let result = hub.videos().list(&vec!["duo".into()])
|
||||
//! .video_category_id("ipsum")
|
||||
//! .region_code("gubergren")
|
||||
//! .page_token("Lorem")
|
||||
//! .on_behalf_of_content_owner("gubergren")
|
||||
//! .my_rating(&Default::default())
|
||||
//! .max_width(-75)
|
||||
//! .max_results(97)
|
||||
//! .max_height(-17)
|
||||
//! .locale("ipsum")
|
||||
//! .add_id("invidunt")
|
||||
//! .hl("amet")
|
||||
//! .chart(&Default::default())
|
||||
//! .doit().await;
|
||||
//!
|
||||
//! match result {
|
||||
//! Err(e) => match e {
|
||||
//! // The Error enum provides details about what exactly happened.
|
||||
//! // You can also just use its `Debug`, `Display` or `Error` traits
|
||||
//! Error::HttpError(_)
|
||||
//! |Error::Io(_)
|
||||
//! |Error::MissingAPIKey
|
||||
//! |Error::MissingToken(_)
|
||||
//! |Error::Cancelled
|
||||
//! |Error::UploadSizeLimitExceeded(_, _)
|
||||
//! |Error::Failure(_)
|
||||
//! |Error::BadRequest(_)
|
||||
//! |Error::FieldClash(_)
|
||||
//! |Error::JsonDecodeError(_, _) => println!("{}", e),
|
||||
//! },
|
||||
//! Ok(res) => println!("Success: {:?}", res),
|
||||
//! }
|
||||
//! # }
|
||||
//! ```
|
||||
//! ## Handling Errors
|
||||
//!
|
||||
//! All errors produced by the system are provided either as [Result](client::Result) enumeration as return value of
|
||||
//! the doit() methods, or handed as possibly intermediate results to either the
|
||||
//! [Hub Delegate](client::Delegate), or the [Authenticator Delegate](https://docs.rs/yup-oauth2/*/yup_oauth2/trait.AuthenticatorDelegate.html).
|
||||
//!
|
||||
//! When delegates handle errors or intermediate values, they may have a chance to instruct the system to retry. This
|
||||
//! makes the system potentially resilient to all kinds of errors.
|
||||
//!
|
||||
//! ## Uploads and Downloads
|
||||
//! If a method supports downloads, the response body, which is part of the [Result](client::Result), should be
|
||||
//! read by you to obtain the media.
|
||||
//! If such a method also supports a [Response Result](client::ResponseResult), it will return that by default.
|
||||
//! You can see it as meta-data for the actual media. To trigger a media download, you will have to set up the builder by making
|
||||
//! this call: `.param("alt", "media")`.
|
||||
//!
|
||||
//! Methods supporting uploads can do so using up to 2 different protocols:
|
||||
//! *simple* and *resumable*. The distinctiveness of each is represented by customized
|
||||
//! `doit(...)` methods, which are then named `upload(...)` and `upload_resumable(...)` respectively.
|
||||
//!
|
||||
//! ## Customization and Callbacks
|
||||
//!
|
||||
//! You may alter the way an `doit()` method is called by providing a [delegate](client::Delegate) to the
|
||||
//! [Method Builder](client::CallBuilder) before making the final `doit()` call.
|
||||
//! Respective methods will be called to provide progress information, as well as determine whether the system should
|
||||
//! retry on failure.
|
||||
//!
|
||||
//! The [delegate trait](client::Delegate) is default-implemented, allowing you to customize it with minimal effort.
|
||||
//!
|
||||
//! ## Optional Parts in Server-Requests
|
||||
//!
|
||||
//! All structures provided by this library are made to be [encodable](client::RequestValue) and
|
||||
//! [decodable](client::ResponseResult) via *json*. Optionals are used to indicate that partial requests are responses
|
||||
//! are valid.
|
||||
//! Most optionals are are considered [Parts](client::Part) which are identifiable by name, which will be sent to
|
||||
//! the server to indicate either the set parts of the request or the desired parts in the response.
|
||||
//!
|
||||
//! ## Builder Arguments
|
||||
//!
|
||||
//! Using [method builders](client::CallBuilder), you are able to prepare an action call by repeatedly calling it's methods.
|
||||
//! These will always take a single argument, for which the following statements are true.
|
||||
//!
|
||||
//! * [PODs][wiki-pod] are handed by copy
|
||||
//! * strings are passed as `&str`
|
||||
//! * [request values](client::RequestValue) are moved
|
||||
//!
|
||||
//! Arguments will always be copied or cloned into the builder, to make them independent of their original life times.
|
||||
//!
|
||||
//! [wiki-pod]: http://en.wikipedia.org/wiki/Plain_old_data_structure
|
||||
//! [builder-pattern]: http://en.wikipedia.org/wiki/Builder_pattern
|
||||
//! [google-go-api]: https://github.com/google/google-api-go-client
|
||||
//!
|
||||
//!
|
||||
|
||||
// Unused attributes happen thanks to defined, but unused structures
|
||||
// We don't warn about this, as depending on the API, some data structures or facilities are never used.
|
||||
// Instead of pre-determining this, we just disable the lint. It's manually tuned to not have any
|
||||
// unused imports in fully featured APIs. Same with unused_mut ... .
|
||||
#![allow(unused_imports, unused_mut, dead_code)]
|
||||
|
||||
// DO NOT EDIT !
|
||||
// This file was generated automatically from 'src/generator/templates/api/lib.rs.mako'
|
||||
// DO NOT EDIT !
|
||||
|
||||
// Re-export the hyper and hyper_rustls crate, they are required to build the hub
|
||||
pub use hyper;
|
||||
pub use hyper_rustls;
|
||||
pub extern crate google_apis_common as client;
|
||||
pub use client::chrono;
|
||||
pub mod api;
|
||||
|
||||
// Re-export the hub type and some basic client structs
|
||||
pub use api::YouTube;
|
||||
pub use client::{Result, Error, Delegate, FieldMask};
|
||||
|
||||
// Re-export the yup_oauth2 crate, that is required to call some methods of the hub and the client
|
||||
#[cfg(feature = "yup-oauth2")]
|
||||
pub use client::oauth2;
|
||||
Reference in New Issue
Block a user