분류
-
Rust: serde json Enum 공부컴퓨터/Rust 2021. 7. 28. 19:20
serde Overview · Serde Serde Serde is a framework for serializing and deserializing Rust data structures efficiently and generically. serde.rs 할 것 지난 글에서 trait를 이용해서 Serialize를 하였는데 (dyn erased_serde::Serialize) 여기서 Deserialize까지 하고 싶었더니 복잡하게 되었다. polymorphism을 파이썬처럼 생각하고 짰더니 어려워진 것 같다. Rust에서는 enum이 하스켈처럼 다양하게 사용될 수 있는 것 같다. 자바에서 enum과 정말 다르다. 간단 예제 // Create an `enum` to classify a web event. ..
-
Rust: Javascript POST json 데이터 consume컴퓨터/Rust 2021. 7. 25. 22:01
할것 Rust Rocket 웹 프레임워크로 서버를 만들고 (backend) 홈페이지에서 (frontend) 아래에서 메시지를 입력하면 만들어둔 Rust 서버로 데이터를 보낼 것이다. 여기서 메시지는 json string을 보내고 이 데이터를 javascript로 POST 한다. Rust 카카오 챗봇은 여러가지 메시지를 한번에 담아서 보낼 수 있는데 (template.outputs) 각 type을 체크해서 vector에 string으로 담아 rust로 { "type": "carousel", "json": data } JSON 형식으로 반환할 것이다. #[post("/json", format = "json", data = "")] pub fn json_test(kakao: String) -> Result {..
-
Rust: String 한글 len() (UTF-8)컴퓨터/Rust 2021. 7. 20. 12:39
할 것 Rust String은 UTF-8 기준으로 len()을 부르면 바이트 기준으로 센다. Go언어의 utf8.RuneCountInString처럼 "안녕하세요"를 length 5로 세고 싶을 땐 unicode-segment crate를 사용하면 편해진다. (또는 chars().count()도 있지만 이 예제에선 String 길이가 5 이상이면 자르고 ... 을 추가한다.) 예제 코드 use unicode_segmentation::UnicodeSegmentation; let mut some_string = "가나다라마바사아"; if some_string.graphemes(true).count() > 5 { // 자소 기준 길이 5 넘음 some_string = UnicodeSegmentation::gra..
-
Rust: serde De/Serialize traits into JSON컴퓨터/Rust 2021. 7. 19. 16:55
할 것 A 버튼이 있고, B 버튼이 있을 때 이 두 버튼은 Base 란 trait를 implement 한다. (자바로 보면 class A implements Base) 이 trait를 implement한 struct들을 Vector에 담아서 이 결과를 json으로 바꾸고 싶은데 하지만 기본적으로는 trait는 불가능하다. 5시간 정도 헤매었다. erased_serde crate를 사용하면 편해진다. 예제 코드 공식 문서에 예제가 없어 카카오톡 챗봇 반응에서 버튼 JSON을 만들 때를 코딩했다. 설명 ButtonJSON이란 struct가 있다. 이 구조체는 벡터 형식으로 trait를 implement한 모든 구조체들의 모음이다. Button이란 trait를 보면 new, set_label, set_msg ..
-
Rust: diesel db query 코드 정리컴퓨터/Rust 2021. 7. 18. 14:30
SELECT * FROM table WHERE date = ? ORDER BY id #[derive(Queryable, AsChangeset, Serialize, Deserialize, Debug, Clone)] #[table_name = "table"] pub struct Data { pub id: i32, pub title: String, pub date: String, pub link: String, pub writer: String, } use crate::db::models::Model; use crate::db::schema::table; use crate::db::schema::table::dsl::*; // SELECT * FROM table WHERE date = ? ORDER BY id..
-
Rust: HTML 파싱하기 (crawling)컴퓨터/Rust 2021. 7. 15. 19:06
scraper causal-agent/scraper HTML parsing and querying with CSS selectors. Contribute to causal-agent/scraper development by creating an account on GitHub. github.com In Go lang Python의 beautifulsoup4, selectolax, Go의 soup처럼 그리 쉽지는 않았다. 아래 대학교 공지를 불러오는 Go언어에서 작성한 코드를 Rust로 작성할 것이다. import ( "fmt" "strconv" "strings" "github.com/anaskhan96/soup" ) // AjouLink is the address of where notices of aj..
-
Rust: Remove duplicate strs in String컴퓨터/Rust 2021. 7. 15. 18:33
Rust 중복된 문자열 제거하기 fn main() { let mut orig = "[hello] zzzzzz".to_string(); let a = "hello".to_string(); let dup = "[".to_string() + &a + "]"; if orig.contains(&dup) { println!("yes"); orig.replace_range((0..dup.len()), ""); } println!("{}", orig.trim()); } // yes // zzzzzz 직접 만들어서 효율은 아직 모름. Rust Playground play.rust-lang.org
-
Rust 백엔드: REST API (Rocket + MySQL)컴퓨터/Rust 2021. 7. 14. 14:11
Rocket Rust 언어용 웹 프레임워크 Rocket - Simple, Fast, Type-Safe Web Framework for Rust Forms? Check! Handling forms is simple and easy. rocket.rs Rust Rocket 기본 설정 프로젝트 시작 cargo new rustweb --bin cd rustweb 기본 src/main.rs #[macro_use] extern crate rocket; #[get("/")] fn index() -> &'static str { "Hello, world!" } #[launch] fn rocket() -> _ { rocket::build().mount("/", routes![index]) } cargo build carg..