use super::{GQLLeetcodeRequest, RunOrSubmitCodeCheckResult};
use crate::types::run_submit_response::RunSubmitResult;
pub use crate::types::submit::{SubmitCodeIntermediateResponse, SubmitCodeRequest};
impl GQLLeetcodeRequest for SubmitCodeRequest {
type T = SubmitCodeIntermediateResponse;
fn get_endpoint(&self) -> String {
let slug = self.slug.as_str();
format!("https://leetcode.com/problems/{slug}/submit/")
}
}
impl GQLLeetcodeRequest for SubmitCodeIntermediateResponse {
type T = RunSubmitResult;
fn is_post(&self) -> bool {
false
}
fn get_endpoint(&self) -> String {
let submission_id = self.submission_id;
format!("https://leetcode.com/submissions/detail/{submission_id}/check/")
}
}
impl RunOrSubmitCodeCheckResult<SubmitCodeIntermediateResponse> for SubmitCodeRequest {}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test() {
let request_json_data = r#"
{
"lang": "python3",
"question_id": "1",
"typed_code": "class Solution:\n def twoSum(self, nums: List[int], target: int) -> List[int]: return [1]"
}
"#;
let request_body: SubmitCodeRequest = serde_json::from_str(request_json_data).unwrap();
println!("Request Body: {:?}", request_body);
let expected_request_body = SubmitCodeRequest {
lang: crate::types::language::Language::Python3,
question_id: "1".to_string(),
typed_code: "class Solution:\n def twoSum(self, nums: List[int], target: int) -> List[int]: return [1]".to_string(),
slug: "".to_string()
};
assert_eq!(request_body, expected_request_body);
let response_json_data = r#"
{
"submission_id": 1001727658
}
"#;
let response_body: SubmitCodeIntermediateResponse =
serde_json::from_str(response_json_data).unwrap();
println!("Response Body: {:?}", response_body);
let expected_response_body = SubmitCodeIntermediateResponse {
submission_id: 1001727658,
};
assert_eq!(response_body, expected_response_body);
}
}