tauri 개발 따라해보기 8
앞 글에서 search.rs 를 살짝 보기했지만... 이부분이 지금 만들고 있는 application의
핵심이다. 일단 search.rs에 추가한 crate부터 보자.
1) rfd : https://docs.rs/rfd/latest/rfd/
location 설정을 위해서 dialog를 여는 기능을 한다.
2) lazy_static : https://docs.rs/lazy_static/latest/lazy_static/
google 번역기를 돌려보자. 뭔 소린지 직관적으로 이해되지 않지만...
Using this macro, it is possible to have statics that require code to be executed at runtime in order to be initialized. This includes anything requiring heap allocations, like vectors or hash maps, as well as anything that requires function calls to be computed. | 이 매크로를 사용하면 런타임에 코드를 실행하여 초기화해야 하는 정적 변수를 가질 수 있습니다. 여기에는 벡터나 해시 맵과 같이 힙 할당이 필요한 모든 것과 함수 호출을 계산해야 하는 모든 것이 포함됩니다. |
정리하면
정적인 값의 생성 시점을 처음 사용하는 시점으로 지연시킨다는 의미로 해석된다.
search.rs의 앞부분 코드에 다음과 같이 정의하였다.
검색 결과물을 저장하고 검색의 완료 유무 값을 mutex로 보호하도록 하며, 전역으로 static하게 관리해햐 한다.
또한 앱의 실행 시점에 초기화를 할 만큼 빠르게 생성할 필요는 없는 것이다.
3) std에 기본적으로 제공되는 Refcell
엄밀히 따지자면 SukerSearch struct의 search_done은 한번 쓰기면 충분하지만 search_result는 file이 검색될때마다
쓰기 동작으로 변경 필요한 데이터가 될것이다. log file 을 떠올려보면 가장 유사할듯하다.
cell<T>를 사용하지 않고 RefCell<T>을 사용한 이유는 (뭐 여기저기 책이나 chatGPT에서도 알려주는 내용이지만)
자신이 가진 T값, 위에서는 Vec<String> 의 레퍼런스를 borrow 가능하도록 하기 때문이다.
main.js에서 요청한 검색된 file list를 rust_make_vec_result() 통해서 전달 받고 있다.
다시 한번 테스트를 해보자.
c:\windows 하위 디렉토리에 .exe 확장자를 가진 파일의 리스트를 뽑아보자.
음.. 다른 검색 프로그램은 안써봐서 모르겠지만...
주로 ls 나 find command(git-bash)로 찾거나 window terminal을 이용하였는데, 확실히 빠르고 보기도 좋은것 같다.
옛날옛날 십수년전 신입사원 시절 존경하던 선배님의 말씀이 기억난다.
진짜 개발자는 자기가 사용하는 툴은 만들줄도 알아야한다는....
그래서 visual studio를 어떻게 만드냐고 물었다가 한대 맞을뻔 했다는... 아무튼..