Skip to content

Commit

Permalink
prepare release
Browse files Browse the repository at this point in the history
  • Loading branch information
unidoc-build committed Mar 1, 2023
1 parent 4ac393b commit 3151ae9
Show file tree
Hide file tree
Showing 58 changed files with 19,553 additions and 19,541 deletions.
4 changes: 2 additions & 2 deletions algo/algo.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
// Use of this source code is governed by the UniDoc End User License Agreement
// terms that can be accessed at https://unidoc.io/eula/

package algo ;import _g "strconv";func _f (_be byte )bool {return _be >='0'&&_be <='9'};func RepeatString (s string ,cnt int )string {if cnt <=0{return "";};_fc :=make ([]byte ,len (s )*cnt );_df :=[]byte (s );for _da :=0;_da < cnt ;_da ++{copy (_fc [_da :],_df );};return string (_fc );};
package algo ;import _b "strconv";func _g (_e byte )bool {return _e >='0'&&_e <='9'};func RepeatString (s string ,cnt int )string {if cnt <=0{return "";};_af :=make ([]byte ,len (s )*cnt );_c :=[]byte (s );for _de :=0;_de < cnt ;_de ++{copy (_af [_de :],_c );};return string (_af );};

// NaturalLess compares two strings in a human manner so rId2 sorts less than rId10
func NaturalLess (lhs ,rhs string )bool {_e ,_d :=0,0;for _e < len (lhs )&&_d < len (rhs ){_c :=lhs [_e ];_dc :=rhs [_d ];_ed :=_f (_c );_gb :=_f (_dc );switch {case _ed &&!_gb :return true ;case !_ed &&_gb :return false ;case !_ed &&!_gb :if _c !=_dc {return _c < _dc ;};_e ++;_d ++;default:_ea :=_e +1;_eab :=_d +1;for _ea < len (lhs )&&_f (lhs [_ea ]){_ea ++;};for _eab < len (rhs )&&_f (rhs [_eab ]){_eab ++;};_cc ,_ :=_g .ParseUint (lhs [_e :_ea ],10,64);_ga ,_ :=_g .ParseUint (rhs [_e :_eab ],10,64);if _cc !=_ga {return _cc < _ga ;};_e =_ea ;_d =_eab ;};};return len (lhs )< len (rhs );};
func NaturalLess (lhs ,rhs string )bool {_bf ,_bd :=0,0;for _bf < len (lhs )&&_bd < len (rhs ){_gd :=lhs [_bf ];_gg :=rhs [_bd ];_d :=_g (_gd );_gdb :=_g (_gg );switch {case _d &&!_gdb :return true ;case !_d &&_gdb :return false ;case !_d &&!_gdb :if _gd !=_gg {return _gd < _gg ;};_bf ++;_bd ++;default:_ggb :=_bf +1;_eb :=_bd +1;for _ggb < len (lhs )&&_g (lhs [_ggb ]){_ggb ++;};for _eb < len (rhs )&&_g (rhs [_eb ]){_eb ++;};_ge ,_ :=_b .ParseUint (lhs [_bf :_ggb ],10,64);_da ,_ :=_b .ParseUint (rhs [_bf :_eb ],10,64);if _ge !=_da {return _ge < _da ;};_bf =_ggb ;_bd =_eb ;};};return len (lhs )< len (rhs );};
666 changes: 333 additions & 333 deletions chart/chart.go

Large diffs are not rendered by default.

26 changes: 13 additions & 13 deletions color/color.go

Large diffs are not rendered by default.

298 changes: 149 additions & 149 deletions common/axcontrol/axcontrol.go

Large diffs are not rendered by default.

552 changes: 276 additions & 276 deletions common/common.go

Large diffs are not rendered by default.

46 changes: 23 additions & 23 deletions common/license/license.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,39 +11,39 @@

// Package license helps manage commercial licenses and check if they
// are valid for the version of UniOffice used.
package license ;import _c "github.com/unidoc/unioffice/internal/license";
package license ;import _a "github.com/unidoc/unioffice/internal/license";

// MakeUnlicensedKey returns a default key.
func MakeUnlicensedKey ()*LicenseKey {return _c .MakeUnlicensedKey ()};
// GetMeteredState checks the currently used metered document usage status,
// documents used and credits available.
func GetMeteredState ()(_a .MeteredStatus ,error ){return _a .GetMeteredState ()};

// SetMeteredKeyPersistentCache sets the metered License API Key persistent cache.
// Default value `true`, set to `false` will report the usage immediately to license server,
// this can be used when there's no access to persistent data storage.
func SetMeteredKeyPersistentCache (val bool ){_a .SetMeteredKeyPersistentCache (val )};const (LicenseTierUnlicensed =_a .LicenseTierUnlicensed ;LicenseTierCommunity =_a .LicenseTierCommunity ;LicenseTierIndividual =_a .LicenseTierIndividual ;LicenseTierBusiness =_a .LicenseTierBusiness ;);

// LegacyLicense holds the old-style unioffice license information.
type LegacyLicense =_a .LegacyLicense ;

// SetLegacyLicenseKey installs a legacy license code. License codes issued prior to June 2019.
// Will be removed at some point in a future major version.
func SetLegacyLicenseKey (s string )error {return _c .SetLegacyLicenseKey (s )};
func SetLegacyLicenseKey (s string )error {return _a .SetLegacyLicenseKey (s )};

// LicenseKey represents a loaded license key.
type LicenseKey =_c .LicenseKey ;

// LegacyLicense holds the old-style unioffice license information.
type LegacyLicense =_c .LegacyLicense ;const (LicenseTierUnlicensed =_c .LicenseTierUnlicensed ;LicenseTierCommunity =_c .LicenseTierCommunity ;LicenseTierIndividual =_c .LicenseTierIndividual ;LicenseTierBusiness =_c .LicenseTierBusiness ;);

// LegacyLicenseType is the type of license
type LegacyLicenseType =_c .LegacyLicenseType ;
type LicenseKey =_a .LicenseKey ;

// SetMeteredKey sets the metered License API key required for SaaS operation.
// Document usage is reported periodically for the product to function correctly.
func SetMeteredKey (apiKey string )error {return _c .SetMeteredKey (apiKey )};

// SetLicenseKey sets and validates the license key.
func SetLicenseKey (content string ,customerName string )error {return _c .SetLicenseKey (content ,customerName );};
func SetMeteredKey (apiKey string )error {return _a .SetMeteredKey (apiKey )};

// SetMeteredKeyPersistentCache sets the metered License API Key persistent cache.
// Default value `true`, set to `false` will report the usage immediately to license server,
// this can be used when there's no access to persistent data storage.
func SetMeteredKeyPersistentCache (val bool ){_c .SetMeteredKeyPersistentCache (val )};
// LegacyLicenseType is the type of license
type LegacyLicenseType =_a .LegacyLicenseType ;

// GetMeteredState checks the currently used metered document usage status,
// documents used and credits available.
func GetMeteredState ()(_c .MeteredStatus ,error ){return _c .GetMeteredState ()};
// SetLicenseKey sets and validates the license key.
func SetLicenseKey (content string ,customerName string )error {return _a .SetLicenseKey (content ,customerName );};

// GetLicenseKey returns the currently loaded license key.
func GetLicenseKey ()*LicenseKey {return _c .GetLicenseKey ()};
func GetLicenseKey ()*LicenseKey {return _a .GetLicenseKey ()};

// MakeUnlicensedKey returns a default key.
func MakeUnlicensedKey ()*LicenseKey {return _a .MakeUnlicensedKey ()};
102 changes: 51 additions & 51 deletions common/logger/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,93 +9,93 @@
// Use of this source code is governed by the UniDoc End User License Agreement
// terms that can be accessed at https://unidoc.io/eula/

package logger ;import (_a "fmt";_b "io";_af "os";_e "path/filepath";_d "runtime";);
package logger ;import (_c "fmt";_g "io";_a "os";_cg "path/filepath";_eb "runtime";);

// IsLogLevel returns true from dummy logger.
func (DummyLogger )IsLogLevel (level LogLevel )bool {return true };const (LogLevelTrace LogLevel =5;LogLevelDebug LogLevel =4;LogLevelInfo LogLevel =3;LogLevelNotice LogLevel =2;LogLevelWarning LogLevel =1;LogLevelError LogLevel =0;);
// Trace logs trace message.
func (_dbe WriterLogger )Trace (format string ,args ...interface{}){if _dbe .LogLevel >=LogLevelTrace {_bfd :="\u005b\u0054\u0052\u0041\u0043\u0045\u005d\u0020";_dbe .logToWriter (_dbe .Output ,_bfd ,format ,args ...);};};

// ConsoleLogger is a logger that writes logs to the 'os.Stdout'
type ConsoleLogger struct{LogLevel LogLevel ;};

// Trace does nothing for dummy logger.
func (DummyLogger )Trace (format string ,args ...interface{}){};

// Debug logs debug message.
func (_agc ConsoleLogger )Debug (format string ,args ...interface{}){if _agc .LogLevel >=LogLevelDebug {_ggd :="\u005b\u0044\u0045\u0042\u0055\u0047\u005d\u0020";_agc .output (_a .Stdout ,_ggd ,format ,args ...);};};

// DummyLogger does nothing.
type DummyLogger struct{};

// IsLogLevel returns true if log level is greater or equal than `level`.
// Can be used to avoid resource intensive calls to loggers.
func (_gd WriterLogger )IsLogLevel (level LogLevel )bool {return _gd .LogLevel >=level };

// Error logs error message.
func (_fae ConsoleLogger )Error (format string ,args ...interface{}){if _fae .LogLevel >=LogLevelError {_fef :="\u005b\u0045\u0052\u0052\u004f\u0052\u005d\u0020";_fae .output (_af .Stdout ,_fef ,format ,args ...);};};
func (_aca WriterLogger )IsLogLevel (level LogLevel )bool {return _aca .LogLevel >=level };

// Logger is the interface used for logging in the unipdf package.
type Logger interface{Error (_ce string ,_ad ...interface{});Warning (_f string ,_df ...interface{});Notice (_cg string ,_fa ...interface{});Info (_cef string ,_bf ...interface{});Debug (_fe string ,_ed ...interface{});Trace (_g string ,_ee ...interface{});IsLogLevel (_dd LogLevel )bool ;};
// Notice does nothing for dummy logger.
func (DummyLogger )Notice (format string ,args ...interface{}){};

// DummyLogger does nothing.
type DummyLogger struct{};
// SetLogger sets 'logger' to be used by the unidoc unipdf library.
func SetLogger (logger Logger ){Log =logger };

// LogLevel is the verbosity level for logging.
type LogLevel int ;

// Error does nothing for dummy logger.
func (DummyLogger )Error (format string ,args ...interface{}){};
// IsLogLevel returns true if log level is greater or equal than `level`.
// Can be used to avoid resource intensive calls to loggers.
func (_bac ConsoleLogger )IsLogLevel (level LogLevel )bool {return _bac .LogLevel >=level };const (LogLevelTrace LogLevel =5;LogLevelDebug LogLevel =4;LogLevelInfo LogLevel =3;LogLevelNotice LogLevel =2;LogLevelWarning LogLevel =1;LogLevelError LogLevel =0;);func (_caf WriterLogger )logToWriter (_df _g .Writer ,_da string ,_ffb string ,_aaa ...interface{}){_dfa (_df ,_da ,_ffb ,_aaa );};

// Debug logs debug message.
func (_fgf WriterLogger )Debug (format string ,args ...interface{}){if _fgf .LogLevel >=LogLevelDebug {_dg :="\u005b\u0044\u0045\u0042\u0055\u0047\u005d\u0020";_fgf .logToWriter (_fgf .Output ,_dg ,format ,args ...);};};
// Warning logs warning message.
func (_ad ConsoleLogger )Warning (format string ,args ...interface{}){if _ad .LogLevel >=LogLevelWarning {_aa :="\u005b\u0057\u0041\u0052\u004e\u0049\u004e\u0047\u005d\u0020";_ad .output (_a .Stdout ,_aa ,format ,args ...);};};var Log Logger =DummyLogger {};

// Info does nothing for dummy logger.
func (DummyLogger )Info (format string ,args ...interface{}){};
// Debug logs debug message.
func (_bcbd WriterLogger )Debug (format string ,args ...interface{}){if _bcbd .LogLevel >=LogLevelDebug {_fag :="\u005b\u0044\u0045\u0042\u0055\u0047\u005d\u0020";_bcbd .logToWriter (_bcbd .Output ,_fag ,format ,args ...);};};

// Info logs info message.
func (_eg ConsoleLogger )Info (format string ,args ...interface{}){if _eg .LogLevel >=LogLevelInfo {_bc :="\u005bI\u004e\u0046\u004f\u005d\u0020";_eg .output (_af .Stdout ,_bc ,format ,args ...);};};func _ege (_cd _b .Writer ,_ff string ,_ea string ,_def ...interface{}){_ ,_fgfe ,_dee ,_dge :=_d .Caller (3);if !_dge {_fgfe ="\u003f\u003f\u003f";_dee =0;}else {_fgfe =_e .Base (_fgfe );};_ead :=_a .Sprintf ("\u0025s\u0020\u0025\u0073\u003a\u0025\u0064 ",_ff ,_fgfe ,_dee )+_ea +"\u000a";_a .Fprintf (_cd ,_ead ,_def ...);};
// NewWriterLogger creates new 'writer' logger.
func NewWriterLogger (logLevel LogLevel ,writer _g .Writer )*WriterLogger {logger :=WriterLogger {Output :writer ,LogLevel :logLevel };return &logger ;};

// Notice logs notice message.
func (_de ConsoleLogger )Notice (format string ,args ...interface{}){if _de .LogLevel >=LogLevelNotice {_cgd :="\u005bN\u004f\u0054\u0049\u0043\u0045\u005d ";_de .output (_af .Stdout ,_cgd ,format ,args ...);};};
// Error does nothing for dummy logger.
func (DummyLogger )Error (format string ,args ...interface{}){};func (_ge ConsoleLogger )output (_fc _g .Writer ,_dd string ,_gc string ,_db ...interface{}){_dfa (_fc ,_dd ,_gc ,_db ...);};

// NewWriterLogger creates new 'writer' logger.
func NewWriterLogger (logLevel LogLevel ,writer _b .Writer )*WriterLogger {logger :=WriterLogger {Output :writer ,LogLevel :logLevel };return &logger ;};
// Info does nothing for dummy logger.
func (DummyLogger )Info (format string ,args ...interface{}){};

// Trace logs trace message.
func (_fg ConsoleLogger )Trace (format string ,args ...interface{}){if _fg .LogLevel >=LogLevelTrace {_be :="\u005b\u0054\u0052\u0041\u0043\u0045\u005d\u0020";_fg .output (_af .Stdout ,_be ,format ,args ...);};};
func (_ff ConsoleLogger )Trace (format string ,args ...interface{}){if _ff .LogLevel >=LogLevelTrace {_bbd :="\u005b\u0054\u0052\u0041\u0043\u0045\u005d\u0020";_ff .output (_a .Stdout ,_bbd ,format ,args ...);};};

// Notice logs notice message.
func (_acg WriterLogger )Notice (format string ,args ...interface{}){if _acg .LogLevel >=LogLevelNotice {_gc :="\u005bN\u004f\u0054\u0049\u0043\u0045\u005d ";_acg .logToWriter (_acg .Output ,_gc ,format ,args ...);};};
func (_gg ConsoleLogger )Notice (format string ,args ...interface{}){if _gg .LogLevel >=LogLevelNotice {_ga :="\u005bN\u004f\u0054\u0049\u0043\u0045\u005d ";_gg .output (_a .Stdout ,_ga ,format ,args ...);};};func _dfa (_ef _g .Writer ,_fde string ,_ace string ,_cga ...interface{}){_ ,_fda ,_fdf ,_cba :=_eb .Caller (3);if !_cba {_fda ="\u003f\u003f\u003f";_fdf =0;}else {_fda =_cg .Base (_fda );};_ed :=_c .Sprintf ("\u0025s\u0020\u0025\u0073\u003a\u0025\u0064 ",_fde ,_fda ,_fdf )+_ace +"\u000a";_c .Fprintf (_ef ,_ed ,_cga ...);};

// Warning does nothing for dummy logger.
func (DummyLogger )Warning (format string ,args ...interface{}){};

// ConsoleLogger is a logger that writes logs to the 'os.Stdout'
type ConsoleLogger struct{LogLevel LogLevel ;};

// IsLogLevel returns true if log level is greater or equal than `level`.
// Can be used to avoid resource intensive calls to loggers.
func (_gb ConsoleLogger )IsLogLevel (level LogLevel )bool {return _gb .LogLevel >=level };func (_cga WriterLogger )logToWriter (_ef _b .Writer ,_beb string ,_ba string ,_cge ...interface{}){_ege (_ef ,_beb ,_ba ,_cge );};
// Info logs info message.
func (_gb ConsoleLogger )Info (format string ,args ...interface{}){if _gb .LogLevel >=LogLevelInfo {_cb :="\u005bI\u004e\u0046\u004f\u005d\u0020";_gb .output (_a .Stdout ,_cb ,format ,args ...);};};

// Debug logs debug message.
func (_bgc ConsoleLogger )Debug (format string ,args ...interface{}){if _bgc .LogLevel >=LogLevelDebug {_ac :="\u005b\u0044\u0045\u0042\u0055\u0047\u005d\u0020";_bgc .output (_af .Stdout ,_ac ,format ,args ...);};};
// Error logs error message.
func (_fce WriterLogger )Error (format string ,args ...interface{}){if _fce .LogLevel >=LogLevelError {_fdc :="\u005b\u0045\u0052\u0052\u004f\u0052\u005d\u0020";_fce .logToWriter (_fce .Output ,_fdc ,format ,args ...);};};

// Warning logs warning message.
func (_edf WriterLogger )Warning (format string ,args ...interface{}){if _edf .LogLevel >=LogLevelWarning {_eef :="\u005b\u0057\u0041\u0052\u004e\u0049\u004e\u0047\u005d\u0020";_edf .logToWriter (_edf .Output ,_eef ,format ,args ...);};};func (_cc ConsoleLogger )output (_aa _b .Writer ,_fc string ,_gg string ,_ae ...interface{}){_ege (_aa ,_fc ,_gg ,_ae ...);};
// Logger is the interface used for logging in the unipdf package.
type Logger interface{Error (_ce string ,_b ...interface{});Warning (_bc string ,_ac ...interface{});Notice (_f string ,_d ...interface{});Info (_ag string ,_bb ...interface{});Debug (_agd string ,_ca ...interface{});Trace (_cae string ,_dc ...interface{});IsLogLevel (_ba LogLevel )bool ;};

// WriterLogger is the logger that writes data to the Output writer
type WriterLogger struct{LogLevel LogLevel ;Output _b .Writer ;};
type WriterLogger struct{LogLevel LogLevel ;Output _g .Writer ;};

// Error logs error message.
func (_gbd WriterLogger )Error (format string ,args ...interface{}){if _gbd .LogLevel >=LogLevelError {_eb :="\u005b\u0045\u0052\u0052\u004f\u0052\u005d\u0020";_gbd .logToWriter (_gbd .Output ,_eb ,format ,args ...);};};
func (_bf ConsoleLogger )Error (format string ,args ...interface{}){if _bf .LogLevel >=LogLevelError {_fa :="\u005b\u0045\u0052\u0052\u004f\u0052\u005d\u0020";_bf .output (_a .Stdout ,_fa ,format ,args ...);};};

// Debug does nothing for dummy logger.
func (DummyLogger )Debug (format string ,args ...interface{}){};
// Notice logs notice message.
func (_ae WriterLogger )Notice (format string ,args ...interface{}){if _ae .LogLevel >=LogLevelNotice {_fe :="\u005bN\u004f\u0054\u0049\u0043\u0045\u005d ";_ae .logToWriter (_ae .Output ,_fe ,format ,args ...);};};

// Trace logs trace message.
func (_ace WriterLogger )Trace (format string ,args ...interface{}){if _ace .LogLevel >=LogLevelTrace {_dc :="\u005b\u0054\u0052\u0041\u0043\u0045\u005d\u0020";_ace .logToWriter (_ace .Output ,_dc ,format ,args ...);};};
// IsLogLevel returns true from dummy logger.
func (DummyLogger )IsLogLevel (level LogLevel )bool {return true };

// Warning logs warning message.
func (_cf WriterLogger )Warning (format string ,args ...interface{}){if _cf .LogLevel >=LogLevelWarning {_bcb :="\u005b\u0057\u0041\u0052\u004e\u0049\u004e\u0047\u005d\u0020";_cf .logToWriter (_cf .Output ,_bcb ,format ,args ...);};};

// NewConsoleLogger creates new console logger.
func NewConsoleLogger (logLevel LogLevel )*ConsoleLogger {return &ConsoleLogger {LogLevel :logLevel }};var Log Logger =DummyLogger {};
func NewConsoleLogger (logLevel LogLevel )*ConsoleLogger {return &ConsoleLogger {LogLevel :logLevel }};

// Notice does nothing for dummy logger.
func (DummyLogger )Notice (format string ,args ...interface{}){};
// Debug does nothing for dummy logger.
func (DummyLogger )Debug (format string ,args ...interface{}){};

// Info logs info message.
func (_ecf WriterLogger )Info (format string ,args ...interface{}){if _ecf .LogLevel >=LogLevelInfo {_cf :="\u005bI\u004e\u0046\u004f\u005d\u0020";_ecf .logToWriter (_ecf .Output ,_cf ,format ,args ...);};};

// SetLogger sets 'logger' to be used by the unidoc unipdf library.
func SetLogger (logger Logger ){Log =logger };

// Warning logs warning message.
func (_bg ConsoleLogger )Warning (format string ,args ...interface{}){if _bg .LogLevel >=LogLevelWarning {_ec :="\u005b\u0057\u0041\u0052\u004e\u0049\u004e\u0047\u005d\u0020";_bg .output (_af .Stdout ,_ec ,format ,args ...);};};
func (_fdd WriterLogger )Info (format string ,args ...interface{}){if _fdd .LogLevel >=LogLevelInfo {_bg :="\u005bI\u004e\u0046\u004f\u005d\u0020";_fdd .logToWriter (_fdd .Output ,_bg ,format ,args ...);};};
26 changes: 13 additions & 13 deletions common/tempstorage/diskstore/diskstore.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,22 @@

// Package diskstore implements tempStorage interface
// by using disk as a storage
package diskstore ;import (_e "github.com/unidoc/unioffice/common/tempstorage";_f "io/ioutil";_a "os";_ga "strings";);
package diskstore ;import (_b "github.com/unidoc/unioffice/common/tempstorage";_c "io/ioutil";_ga "os";_f "strings";);

// RemoveAll removes all files in the directory
func (_fe diskStorage )RemoveAll (dir string )error {if _ga .HasPrefix (dir ,_a .TempDir ()){return _a .RemoveAll (dir );};return nil ;};

// SetAsStorage sets temp storage as a disk storage
func SetAsStorage (){_ad :=diskStorage {};_e .SetAsStorage (&_ad )};type diskStorage struct{};
// TempFile creates a new temp directory by calling ioutil TempDir
func (_d diskStorage )TempDir (pattern string )(string ,error ){return _c .TempDir ("",pattern )};

// Add is not applicable in the diskstore implementation
func (_ge diskStorage )Add (path string )error {return nil };
// TempFile creates a new temp file by calling ioutil TempFile
func (_e diskStorage )TempFile (dir ,pattern string )(_b .File ,error ){return _c .TempFile (dir ,pattern );};

// Open opens file from disk according to a path
func (_aa diskStorage )Open (path string )(_e .File ,error ){return _a .OpenFile (path ,_a .O_RDWR ,0644)};
func (_a diskStorage )Open (path string )(_b .File ,error ){return _ga .OpenFile (path ,_ga .O_RDWR ,0644)};

// TempFile creates a new temp file by calling ioutil TempFile
func (_c diskStorage )TempFile (dir ,pattern string )(_e .File ,error ){return _f .TempFile (dir ,pattern );};
// Add is not applicable in the diskstore implementation
func (_fe diskStorage )Add (path string )error {return nil };

// TempFile creates a new temp directory by calling ioutil TempDir
func (_d diskStorage )TempDir (pattern string )(string ,error ){return _f .TempDir ("",pattern )};
// SetAsStorage sets temp storage as a disk storage
func SetAsStorage (){_bd :=diskStorage {};_b .SetAsStorage (&_bd )};

// RemoveAll removes all files in the directory
func (_gg diskStorage )RemoveAll (dir string )error {if _f .HasPrefix (dir ,_ga .TempDir ()){return _ga .RemoveAll (dir );};return nil ;};type diskStorage struct{};
Loading

0 comments on commit 3151ae9

Please sign in to comment.