use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Form {
pub form_id: Option<String>,
pub info: Option<FormInfo>,
pub settings: Option<FormSettings>,
pub publish_settings: Option<PublishSettings>,
#[serde(default)]
pub items: Vec<FormItem>,
pub linked_sheet_id: Option<String>,
pub responder_uri: Option<String>,
pub revision_id: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FormInfo {
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub document_title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FormSettings {
pub quiz_settings: Option<QuizSettings>,
pub email_collection_type: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct QuizSettings {
pub is_quiz: Option<bool>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PublishSettings {
pub publish_state: Option<PublishState>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PublishState {
pub is_published: Option<bool>,
pub is_accepting_responses: Option<bool>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FormItem {
pub item_id: Option<String>,
pub title: Option<String>,
pub description: Option<String>,
pub question_item: Option<QuestionItem>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct QuestionItem {
pub question: Option<Question>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Question {
pub question_id: Option<String>,
pub required: Option<bool>,
pub choice_question: Option<ChoiceQuestion>,
pub text_question: Option<TextQuestion>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ChoiceQuestion {
pub r#type: Option<String>,
pub options: Option<Vec<ChoiceOption>>,
pub shuffle: Option<bool>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ChoiceOption {
pub value: Option<String>,
pub is_other: Option<bool>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TextQuestion {
pub paragraph: Option<bool>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FormResponse {
pub form_id: Option<String>,
pub response_id: Option<String>,
pub create_time: Option<String>,
pub last_submitted_time: Option<String>,
pub answers: Option<HashMap<String, Answer>>,
pub respondent_email: Option<String>,
pub total_score: Option<f64>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Answer {
pub question_id: Option<String>,
pub text_answers: Option<TextAnswers>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TextAnswers {
#[serde(default)]
pub answers: Vec<TextAnswer>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TextAnswer {
pub value: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ListFormResponsesResponse {
pub responses: Option<Vec<FormResponse>>,
pub next_page_token: Option<String>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateFormInfo {
pub title: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateFormRequest {
pub info: CreateFormInfo,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UpdateFormInfo {
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UpdateFormInfoRequest {
pub info: UpdateFormInfo,
pub update_mask: String,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UpdateFormRequestItem {
pub update_form_info: UpdateFormInfoRequest,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct BatchUpdateFormRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub include_form_in_response: Option<bool>,
pub requests: Vec<UpdateFormRequestItem>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BatchUpdateFormResponse {
pub form: Option<Form>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Watch {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub event_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub create_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expire_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub target: Option<WatchTarget>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WatchTarget {
#[serde(skip_serializing_if = "Option::is_none")]
pub topic: Option<CloudPubsubTopic>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CloudPubsubTopic {
#[serde(skip_serializing_if = "Option::is_none")]
pub topic_name: Option<String>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateWatchRequest {
pub watch: Watch,
#[serde(skip_serializing_if = "Option::is_none")]
pub watch_id: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RenewWatchRequest {}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ListWatchesResponse {
pub watches: Option<Vec<Watch>>,
}