1+ use crate :: { packet:: WitcherPacket , packet_data:: WitcherPacketData } ;
2+
3+ pub type ResponseFormatter = fn ( WitcherPacket ) -> String ;
4+
5+ pub fn default_formatter ( response : WitcherPacket ) -> String {
6+ format ! ( "{}" , response)
7+ }
8+
9+ pub fn scripts_reload_formatter ( response : WitcherPacket ) -> String {
10+ if response. payload . len ( ) > 2 && response. payload [ 0 ] == WitcherPacketData :: StringUTF8 ( "ScriptCompiler" . to_string ( ) ) {
11+ if response. payload [ 1 ] == WitcherPacketData :: StringUTF8 ( "started" . to_string ( ) ) {
12+ return "Script compilation started..." . to_string ( ) ;
13+ }
14+ else if response. payload [ 1 ] == WitcherPacketData :: StringUTF8 ( "log" . to_string ( ) ) {
15+ return format ! ( "{}" , response. payload[ 2 ] ) ;
16+ }
17+ else if response. payload [ 1 ] == WitcherPacketData :: StringUTF8 ( "warn" . to_string ( ) ) {
18+ return format ! ( "[Warning] {}({}): {}" , response. payload[ 3 ] , response. payload[ 2 ] , response. payload[ 4 ] ) ;
19+ }
20+ else if response. payload [ 1 ] == WitcherPacketData :: StringUTF8 ( "error" . to_string ( ) ) {
21+ return format ! ( "[Error] {}({}): {}" , response. payload[ 3 ] , response. payload[ 2 ] , response. payload[ 4 ] ) ;
22+ }
23+ else if response. payload [ 1 ] == WitcherPacketData :: StringUTF8 ( "finished" . to_string ( ) ) {
24+ if response. payload [ 2 ] == WitcherPacketData :: Int8 ( 0 ) {
25+ return "Script compilation finished successfully." . to_string ( ) ;
26+ } else {
27+ return "Script compilation finished with errors." . to_string ( ) ;
28+ }
29+ }
30+ }
31+
32+ default_formatter ( response)
33+ }
34+
35+ pub fn scripts_root_path_formatter ( response : WitcherPacket ) -> String {
36+ if response. payload . len ( ) > 2
37+ && response. payload [ 0 ] == WitcherPacketData :: StringUTF8 ( "ScriptCompiler" . to_string ( ) )
38+ && response. payload [ 1 ] == WitcherPacketData :: StringUTF8 ( "RootPathConfirm" . to_string ( ) ) {
39+ return format ! ( "{}" , response. payload[ 2 ] ) ;
40+ }
41+
42+ default_formatter ( response)
43+ }
44+
45+ pub fn scripts_execute_formatter ( response : WitcherPacket ) -> String {
46+ if response. payload . len ( ) > 2 {
47+ return format ! ( "{}" , response. payload[ 2 ] ) ;
48+ }
49+
50+ default_formatter ( response)
51+ }
52+
53+ pub fn mod_list_formatter ( response : WitcherPacket ) -> String {
54+ if response. payload . len ( ) >= 3
55+ && response. payload [ 0 ] == WitcherPacketData :: StringUTF8 ( "scripts" . to_string ( ) )
56+ && response. payload [ 1 ] == WitcherPacketData :: StringUTF8 ( "pkgSyncListing" . to_string ( ) ) {
57+ let mut result = String :: new ( ) ;
58+
59+ if let WitcherPacketData :: Int32 ( installed) = response. payload [ 2 ] {
60+ result += & format ! ( "Mods installed: {}\n " , installed) ;
61+ }
62+
63+ if response. payload . len ( ) > 3 {
64+ for i in ( 3 .. response. payload . len ( ) ) . step_by ( 2 ) {
65+ result += & format ! ( "{}\n " , response. payload[ i] ) ;
66+ }
67+ }
68+
69+ return result;
70+ }
71+
72+ default_formatter ( response)
73+ }
74+
75+ pub fn opcode_formatter ( response : WitcherPacket ) -> String {
76+ if response. payload . len ( ) == 9
77+ && response. payload [ 0 ] == WitcherPacketData :: StringUTF8 ( "ScriptDebugger" . to_string ( ) )
78+ && response. payload [ 1 ] == WitcherPacketData :: StringUTF8 ( "OpcodeBreakdownResponse" . to_string ( ) ) {
79+ // I don't know what most of these magical numbers in the response mean
80+ // so I'm gonna print out only the stuff that looks anywhere useful
81+ return format ! ( "{}{}" , response. payload[ 6 ] , response. payload[ 8 ] ) ;
82+ }
83+
84+ default_formatter ( response)
85+ }
86+
87+ pub fn var_list_formatter ( response : WitcherPacket ) -> String {
88+ if response. payload . len ( ) > 4
89+ && response. payload [ 1 ] == WitcherPacketData :: StringUTF8 ( "vars" . to_string ( ) ) {
90+ let mut result = String :: new ( ) ;
91+
92+ let tab_line = format ! ( "{}+-{}+-{}\n " , "-" . repeat( 40 ) , "-" . repeat( 45 ) , "-" . repeat( 40 ) ) ;
93+ result += & tab_line;
94+ result += & format ! ( "{:40}| {:45}| {}\n " , "Section" , "Variable" , "Value" ) ;
95+ result += & tab_line;
96+
97+ for i in ( 4 .. response. payload . len ( ) ) . step_by ( 5 ) {
98+ result += & format ! ( "{:40}| {:45}| {}\n " , response. payload[ i+1 ] , response. payload[ i] , response. payload[ i+2 ] ) ;
99+ }
100+
101+ return result;
102+ }
103+
104+ default_formatter ( response)
105+ }
0 commit comments